arrays - 扩展哈希表中的属性

标签 arrays powershell csv hashtable

我的脚本遇到了一个简单的问题,我想在远程服务器上运行 GCI,问题是,该值与另一个哈希表属性组合在一起,因此 GCI 失败。

该脚本从两列 .csv 中读取条目,标题为“服务器”和“平台”

这是我得到的:

$ShortDate = (Get-Date).ToString('MM/dd/yyyy')
$CheckServer = @{}
$serverObjects = @() # create a list of server objects

Import-Csv $Dir\Servers.csv | ForEach {  
    $CheckServer.Server = $_.Server
    $CheckServer.Platform = $_.Platform

    if (GCI \\$_.Server\c$\log\Completed_Summary_*.html -EA 0 | where {$.LastWriteTime -ge "$ShortDate"}) {
        Write-Host "FOUND"
    } # end of IF GCI
} # end of For-Each

$serverObjects += New-Object -TypeName PSObject -Property $CheckServer

问题是 $_.Server 的条目应该是 SERVER1、SERVER2、SERVER3 等,即servers.csv 中的所有条目,而不是 $ 的值_.Server$_.Platform 组合在一起。如:

Write-Host "Checking" \\@{Server=SERVER1; Platform=PLATFORM_1}.Server\c$\log\Completed_Summary_*.html

它应该显示如下:

Write-Host "Checking" \\SERVER1\log\Completed_Summary_*.html

如何取消组合它们以便 GCI 命令起作用?

最佳答案

PowerShell 仅在字符串内进行简单的变量扩展。对于更复杂的表达式(例如索引操作或访问对象属性/方法),它将插入数组或对象变量的字符串化值,并保持其余操作不变。

演示:

PS C:\> $array = 23, 42
PS C:\> Write-Host "some $array[1] or other"
some 23 42[1] or other
PS C:\> $object = New-Object -Type PSObject -Property @{Foo=23; Bar=42}
PS C:\> Write-Host "some $object.Foo or other"
some @{Bar=42; Foo=23}.Foo or other

To avoid this you need to either:

  • assign the resulting value to a variable first and use that variable in the string:

    $value = $array[5]
    Write-Host "some $value or other"
    
    $value = $object.Foo
    Write-Host "some $value or other"
    
  • 使用subexpression ($(...)):

    Write-Host "some $($array[5]) or other"
    Write-Host "some $($object.Foo) or other"
    
  • 使用format operator (-f):

    Write-Host "some {0} or other" -f $array[5]
    Write-Host "some {0} or other" -f $object.Foo
    

关于arrays - 扩展哈希表中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873180/

相关文章:

javascript - 在 jQuery AJAX 后输出中读取 JSON 数据

c - 将结构数组传递给函数以输入值

c - 如何将字符保存到数组中其ascii数字的位置在c中

powershell - Powershell,多行文本文件变量

powershell - Rest API调用可与curl配合使用,但不适用于PowerShell

powershell - 无法识别 Get-Content 命令

java - 哪个是处理大型 CSV 文件的最佳方式(Java、MySQL、MongoDB)

javascript - 如何使用 JavaScript 检查多个复选框?

java - csv 行放入单独的 txt 文件中?

php csv显示问号