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

时间:2018-08-28 12:18:48

标签: string powershell contains

我已经编写了一个脚本,该脚本可以到达远程计算机或本地计算机,并获取环境变量并将其放入文件中。

问题是我有内部和外部主机。每个主机名将以INT或EXT结尾。如果该命令在名称为EXT的任何主机上运行,​​则需要将其与我的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。

1 个答案:

答案 0 :(得分:1)

在将-like运算符应用于对象的 collection 时,在您的示例中,字符串数组(如果用作 filter 运算符)即-。它只返回满足条件的项目。

更改参数类型:

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

或一一连接到每台计算机:

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