इसके आसपास कुछ खोज करने के बाद ऐसा लगता है कि आप सही हैं कि प्री-प्रॉम्प्ट [computername]:
टैग को ओवरराइड करने के लिए अंतर्निर्मित हुक नहीं है।
सौभाग्य से, मेरे पास एक हैकी कामकाज है जो आपके लिए काम कर सकता है!
रंग प्राप्त करने के लिए, हम केवल Write-Host
का उपयोग कर सकते हैं। prompt
फ़ंक्शन से आउटपुट पूरी तरह से बाएं-उचित होगा, जो हम चाहते हैं। दुर्भाग्यवश, डिफ़ॉल्ट [computername]:
टैग सीधे बाद में डाला गया है। इसके परिणामस्वरूप कम्प्यूटर का नाम प्रॉम्प्ट में डुप्लीकेट किया जा रहा है, एक बार रंग के साथ और बिना किसी के।
हम बैकस्पेस वर्ण वाले स्ट्रिंग को लौटकर इसके आसपास आते हैं, इसलिए अन-रंगीन [computername]:
ओवरराइट हो जाएगा। यह सामान्य संकेत स्ट्रिंग है, आमतौर पर वर्तमान पथ।
अंत में, सामान्य प्रॉम्प्ट स्ट्रिंग कम होने पर और अन-रंगीन [computername]:
टैग को पूरी तरह से ओवरराइट नहीं करता है, हमें डमी स्पेस वर्ण जोड़कर कुछ अंतिम सफाई करने की आवश्यकता है। यह कैरेट को धक्का दे सकता है, हालांकि, हमें कैरेट को कोरेंट स्थिति में वापस करने के लिए और अधिक बैकस्पेस जोड़ने की आवश्यकता है।
सभी अप, अपने रिमोट मशीन पर इस का उपयोग करें:
# put your logic here for getting prompt color by machine name
function GetMachineColor($computerName)
{
[ConsoleColor]::Green
}
function GetComputerName
{
# if you want FQDN
$ipProperties = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
"{0}.{1}" -f $ipProperties.HostName, $ipProperties.DomainName
# if you want host name only
# $env:computername
}
function prompt
{
$cn = GetComputerName
# write computer name with color
Write-Host "[${cn}]: " -Fore (GetMachineColor $cn) -NoNew
# generate regular prompt you would be showing
$defaultPrompt = "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
# generate backspaces to cover [computername]: pre-prompt printed by powershell
$backspaces = "`b" * ($cn.Length + 4)
# compute how much extra, if any, needs to be cleaned up at the end
$remainingChars = [Math]::Max(($cn.Length + 4) - $defaultPrompt.Length, 0)
$tail = (" " * $remainingChars) + ("`b" * $remainingChars)
"${backspaces}${defaultPrompt}${tail}"
}
इस के साथ थोड़ा सा समस्या; अगर कंप्यूटर रिमोट है और mycomputer.mydomain.com जैसा नाम है तो यह गड़बड़ लग रहा है; संभवतः क्योंकि $ env: ComputerName केवल स्थानीय हिस्सा है? –
हां, '$ env: ComputerName' सिर्फ होस्टनाम है। मेरा मानना है कि टैग पावरहेल उस स्ट्रिंग से मेल खाता है जिसे आप 'एंटर-PsSession -ComputerName' पर पास करते हैं। यही है, अगर आप केवल होस्टनाम देते हैं, तो यह केवल डोमेन-जुड़े बॉक्स के लिए होस्टनाम दिखाएगा। यदि आपने इसे पूरी तरह अर्हता प्राप्त करने का विकल्प चुना है, तो पावरहेल पूरी तरह से योग्य नाम मुद्रित करेगा। यह सभी प्रॉम्प्ट कोड रिमोट बॉक्स पर चल रहा है, जिसमें यह जानने का कोई तरीका नहीं है कि आपने कौन सा विकल्प चुना होगा। – latkin
इसे ठीक करने के लिए एक niec रास्ता मिला; मेरा सहायक कनेक्शन फ़ंक्शन केवल दूरस्थ सत्र में कनेक्ट करने के लिए उपयोग किए गए होस्ट को पास कर सकता है, जिसका उपयोग तत्काल फ़ंक्शन (यदि परिभाषित किया गया हो) द्वारा किया जा सकता है 'Invoke-Command-session $ session -ScriptBlock {$ linkedHost = $ का उपयोग कर: remoteHost} ' –