Powershell命令在控制台和脚本执行中显示了不同的行为



我正在执行一个powershell脚本,它将触发一个特定于产品的命令并处理返回的结果。返回结果的示例看起来像下面的

XXXX command completed  Thu Jan 13 16:59:59 2022 :XXXX, Account 'XXXX' on 'XXXX' modified successfully

因此,如果结果包含修改成功,它将根据结果执行任务A,反之亦然。但是当我在powershell脚本中运行它时,我无法获得预期的输出。请参阅我下面的脚本

write-host "The type of variable :"$eTSuspend.GetType().Name
write-host "The string : "$eTSuspend.Contains('successfully')


FYI,$eTSuspend是变量,存储命令返回的结果,以下是我的脚本输出

The type of variable : Object[]
The string :  False 

我试图检查变量的数据类型,但它显示为"Object[]",字符串验证显示为false。所以我有点困惑,因为结果与我直接在powershell控制台中执行所有powershell命令的结果不同。以下是我在powershell控制台中执行的步骤
1(复制返回的结果并手动分配给"$eTSuspend">
2(执行$eTSuspen.GetType((.Name-是,它是字符串数据类型
3($eTSuspend.Contains("成功"(-是,结果返回true
PS C:UsersXXX.XXX> $eTSuspend.GetType().Name
String
PS C:UsersXXX.XXX> $eTSuspend.Contains("successfully")
True

我真的不明白为什么当我用脚本和powershell控制台执行时,同一个命令"GetType(("one_answers"-Contations"都返回了不同的结果

您正在测试两种不同的类型的包容。

  • String.Contains()执行子字符串搜索-如果在字符串中的任何偏移量处找到子字符串参数,则返回true:
    • "abc def".Contains("def")返回$true,因为可以在偏移量4处从"abc def"提取持续的"def"
  • CCD_ 7和CCD_;这个数组/列表/集合是否包含其成员中参数的精确副本":
    • @("abc", "def").Contains("def")返回true,因为数组中至少有一个项满足约束-"def""def"是等效的
    • @("abc", "def").Contains("de")返回false,因为数组中没有任何项与"de"完全等效,换句话说:
      • "abc" -eq "de"不正确
      • "def" -eq "de"也不正确
      • 数组中没有更多要测试的项,因此返回$false

最新更新