我有一个很难描述的非常奇怪的问题,所以请忍受我。
我有只包含Windows服务器名称的变量$ BestHost。我将此变量传递给我编写的名为Get-CurrentSite的模块,该模块进行一些测试以检查服务器所在的物理位置。
在测试中,我手动设置
PS C:\Windows\system32> $Besthost = "WK-VPS-009"
PS C:\Windows\system32> Get-CurrentSite -CHost $Besthost
WK
,模块调用正常,得到所需的结果。该服务器在站点WK中。
在较大的脚本中,$ BestHost是通过API调用定义的,但结果是相同的。它读
PS C:\Windows\system32> $BestHost = ($BestHost = Invoke-WebRequest -URI "http://hypervision.host.net/api/v1/vps/best_host?exclude=$currentsiteswap,$VPShost").Content
$BestHost= $BestHost -replace '"',"" #this just removes additional "
PS C:\Windows\system32> $BestHost
WK-VPS-009
但是这次我尝试在Get-CurrentSite中使用此变量时,出现错误
PS C:\Windows\system32> Get-CurrentSite -CHost $BestHost
Invoke-Command : One or more computer names are not valid. If you are trying to pass a URI, use the -ConnectionUri parameter, or pass URI objects instead of strings.
At C:\Users\frank\Documents\WindowsPowerShell\Modules\Get-CurrentSite\Get-CurrentSite.psm1:10 char:12
+ $HostAdd = Invoke-Command -ComputerName $CHost { get-NetIPAddress}
这是Invoke-Command的错误,这是我使用Get-CurrentSite确定站点位置的第一件事。
我首先想到的是变量类型,所以...
这是手动设置的变量:
PS C:\Windows\system32> $BestHost.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
这是通过API调用设置的:
PS C:\Windows\system32> $BestHost.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
对我来说,它们看起来是包含完全相同数据的相同变量,一个起作用,一个不起作用。我很困惑。
任何帮助将不胜感激。
编辑:更多信息
我只是将这2个结果放入2个不同的变量中,并进行了比较
PS C:\Windows\system32> $BestHost
WK-VPS-009
PS C:\Windows\system32> $BestHost1
WK-VPS-009
PS C:\Windows\system32> $BestHost1.Equals($BestHost)
False
PS C:\Windows\system32> ($BestHost.GetEnumerator() | % ToInt32 $null | % ToString X4) -join '-'
0057-004B-002D-0056-0050-0053-002D-0030-0030-0039
PS C:\Windows\system32> ($BestHost1.GetEnumerator() | % ToInt32 $null | % ToString X4) -join '-'
0057-004B-002D-0056-0050-0053-002D-0030-0030-0039-000A-000A
答案 0 :(得分:0)
看起来您的API函数以某种方式将两个换行符添加到字符串输出(000A) 在对其进行处理之前,请通过在代码中添加以下内容来清理这些换行符:
$besthost = $besthost -Replace '\x0A',''
您可以使用正则表达式(regexp)将操作与双引号(“,ascii代码x22)的清除结合起来:
$besthost = $besthost -Replace '[\x0A\x22]',''