Странная строчка - PullRequest
       1

Странная строчка

0 голосов
/ 30 августа 2018

У меня очень странная проблема, которую трудно описать, поэтому, пожалуйста, потерпите меня.

У меня есть переменная $ BestHost, которая просто содержит имя сервера Windows. Я передаю эту переменную в модуль, который я написал, называемый 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

1 Ответ

0 голосов
/ 30 августа 2018

Похоже, ваша функция API как-то добавляет два перевода строки в вывод строки (000A) Перед обработкой очистите эти переводы строк, добавив в свой код следующее:

  $besthost = $besthost -Replace '\x0A','' 

Вы можете комбинировать действие с очисткой двойных кавычек (", ascii code x22), используя регулярное выражение (regexp):

 $besthost = $besthost -Replace '[\x0A\x22]','' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...