csv中的PowerShell变量

csv中的PowerShell变量,powershell,Powershell,我在使用来自csv文件的脚本中的变量时遇到问题。每次我找到文本UNC,我都想做点什么。当文本UNC找不到时,我想做些别的事情。这非常适合在本地或远程服务器上运行脚本 脚本 $File = (Import-Csv -Path S:\Input\Auto_Clean.csv | Select-String -NotMatch "#") Foreach ($Item in $File) { If ( $SERVER -eq "UNC" ) { Write-Host "UNC

我在使用来自csv文件的脚本中的变量时遇到问题。每次我找到文本UNC,我都想做点什么。当文本UNC找不到时,我想做些别的事情。这非常适合在本地或远程服务器上运行脚本

脚本

$File = (Import-Csv -Path S:\Input\Auto_Clean.csv | Select-String -NotMatch "#")

Foreach ($Item in $File) {
    If ( $SERVER -eq "UNC" ) { 
        Write-Host "UNC: $SERVER, $PATH, $OlderThanDays" } 
        else {
        Write-Host "Not UNC: $SERVER, $PATH, $OlderThanDays"}
}
CSV文件

# Input file:
SERVER, PATH, OlderThanDays
Server1, E:\Share\Dir1, 10
Server2, F:\Share\Dir2, 5
UNC, \\Domain\Share\Dir1, 30
Not UNC: Server1, E:\Share\Dir1, 10
Not UNC: Server2, F:\Share\Dir2, 5
UNC: UNC, \\Domain\Share\Dir1, 30
cosole中所需的结果

# Input file:
SERVER, PATH, OlderThanDays
Server1, E:\Share\Dir1, 10
Server2, F:\Share\Dir2, 5
UNC, \\Domain\Share\Dir1, 30
Not UNC: Server1, E:\Share\Dir1, 10
Not UNC: Server2, F:\Share\Dir2, 5
UNC: UNC, \\Domain\Share\Dir1, 30
写入主机$File
的输出正确显示了标签/变体:

Write-Host $File
@{SERVER=UNC; PATH=\\domain\Share\Dir1; OlderThanDays=10}

谢谢你的帮助。

我想这就是你想要的:

Import-Csv -Path "S:\Input\Auto_Clean.csv" | % {
    if ($_.Server -eq "UNC")
    {
        Write-Host "UNC: $($_.Server), $($_.Path), $($_.OlderThanDays)" 
    }
    else
    {
        Write-Host "Not UNC: $($_.Server), $($_.Path), $($_.OlderThanDays)"
    }
}
这将产生以下输出:

Not UNC: Server1, E:\Share\Dir1, 10
Not UNC: Server2, F:\Share\Dir2, 5
UNC: UNC, \\Domain\Share\Dir1, 30
如果要忽略以#开头的行,可以使用以下命令:

(Get-Content "S:\Input\Auto_Clean.csv") -notmatch '^#' | ConvertFrom-CSV | % {
    if ($_.Server -eq "UNC")
    {
        Write-Host "UNC: $($_.Server), $($_.Path), $($_.OlderThanDays)" 
    }
    else
    {
        Write-Host "Not UNC: $($_.Server), $($_.Path), $($_.OlderThanDays)"
    }
}

谢谢你,马丁,我刚试过,但它总是显示“非UNC:…”行,“UNC one”行也显示为“非UNC:…”。至少这次它确实显示了一些东西:)难道没有一个选项可以使用无管道的格式
Foreach
吗?你确定你的CSV与你发布的内容匹配吗,我已经用我看到的输出更新了我的答案?非常奇怪,但它现在确实工作了。这次我又正确地复制了一遍。非常感谢你,马丁。仍在研究如何通过For each循环而不是管道将其放入变量中。我现在看到,我已经准备好了筛选,可以删除以
开头的行,就像在
选择字符串-不匹配“
中一样。这就是我的代码无法工作的原因。。是的,没错,Select字符串将返回一个Microsoft.PowerShell.Commands.MatchInfo对象,我想您期待的是不同的东西。您不需要notmatch,因为导入csv将为您完成这项工作。