Как проверить конкретный текст в переменной - PullRequest
0 голосов
/ 28 августа 2018

У меня есть сценарий, который я написал, который обращается к удаленному или локальному компьютеру, захватывает переменные среды и помещает их в файл.

проблема в том, что у меня есть внутренний и внешний хосты. Каждое имя хоста будет заканчиваться либо INT, либо EXT. если команда выполняется на каком-либо хосте с именем EXT, ее необходимо будет снабдить моим объектом PSCredential. все другие хосты не будут работать, если используются учетные данные.

Моя проблема заключается в том, как определить, имеет ли имя хоста "EXT" в имени или нет.

если я помещу нижеприведенное в ISE, это даст мне true / false и работает нормально, Но если эта переменная заполняется из параметра, когда сценарий называется $ test, в конечном итоге он становится тем именем хоста, которое было введено.

$compuername = "HOSTNAME1ext"
$test = $compuername -like  "*ext"
if ($test -eq $true) {Write-Host "yes"} else {Write-Host "no"}
yes

Но когда он используется таким образом, он не работает

 [cmdletbinding()]           
param(
 [Parameter(Mandatory=$true)]            
 [string[]]$ComputerName = $env:ComputerName,            
 [string]$Name            
)  
$test = $ComputerName -like "*ext" 
if ($test -eq $true) {
$UNPASSWORD = Get-Credential -UserName "$ComputerName\ACCOUNT" -message "Enter the Password for the ACCOUNT Account";$EnvObj = @(Get-WMIObject -Class Win32_Environment -ComputerName $ComputerName -Credential $UNPASSWORD -EA Stop) 
} else {$EnvObj = @(Get-WMIObject -Class Win32_Environment -ComputerName $ComputerName -EA Stop)}          

когда это сделано, $ test возвращается после ввода имени хоста, а не True или False.

1 Ответ

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

Когда вы применяете оператор -like к коллекции объектов, в вашем примере это массив строк, если он работает как оператор filter - т.е. он возвращает только элементы, которые удовлетворяют условию.

Либо измените тип параметра:

[Parameter(Mandatory=$true)]
[string]$ComputerName

или подключитесь к каждому компьютеру один за другим:

foreach($Name in $ComputerName){
    if($Name -like '*ext'){
        # Ask for Credential
    }
}
...