String 如何检查变量中的特定文本

String 如何检查变量中的特定文本,string,powershell,contains,String,Powershell,Contains,我编写了一个脚本,它可以连接到远程机器或本地机器,获取环境变量并将它们放入文件中 问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称中包含EXT的任何主机上运行,则需要随my PSCredential对象一起提供该命令。如果使用凭据,所有其他主机将无法工作 我的问题是如何确定主机名中是否有“EXT” 如果我在ISE中输入以下内容,它会给我一个正确/错误的答案,并且效果良好, 但是,如果在脚本名为$test时从参数填充该变量,则该变量将与输入的主机名相同 $compuer

我编写了一个脚本,它可以连接到远程机器或本地机器,获取环境变量并将它们放入文件中

问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称中包含EXT的任何主机上运行,则需要随my PSCredential对象一起提供该命令。如果使用凭据,所有其他主机将无法工作

我的问题是如何确定主机名中是否有
“EXT”

如果我在ISE中输入以下内容,它会给我一个正确/错误的答案,并且效果良好, 但是,如果在脚本名为$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。

当您将
-like
运算符应用于对象集合时,在您的示例中,字符串数组用作筛选运算符,即它只返回满足条件的项

或者更改参数类型:

[Parameter(Mandatory=$true)]
[string]$ComputerName
或逐个连接到每台计算机:

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