针对可变内容的Powershell测试路径

时间:2016-02-23 20:21:39

标签: powershell powershell-v4.0

我已将csv中的计算机名称列表导入变量。

现在,我想测试列表中每个计算机名称上是否存在路径

期望的输出:

Computer     Status
--------     ------
computer1    Online
computer2    Offline

下面会将答案注册为false。这是对3台机器的一个答案。当我测试$userscomputer变量时,它确实包含computernames的列表,其中一些是在线的。

看起来我需要针对变量中的每台机器运行,但到目前为止我还没有成功。谢谢你的阅读。

$name = "vader"
$usersComputer = import-csv .....etc.
$path = "\\$userscomputer\c$\users\$name"

$componline = test-path $path

$componline

csv文件有2列     主机名下的“主机名”“已记录用户”计算机名称和“已记录用户”下的广告名称     computer1 bicard     computer2 bicard     computer3 vader

理想情况下,ID就像显示哪个计算机在线,我的想法在下面

$usersComputer | ForEach-Object {
$cn = $_."Host Name"
$path = "\\$cn\c$\users\$name"
$state = Test-Path $path
write-host $cn, $state

}

它在下面输出,但是计算机3应该报告为真,并且未显示$ cn变量。

失败 失败 失败

我已经重新解决了你的解决方案,现在效果非常好。已完成CSV文件的导入,因此变量具有计算机名称。经过以下工作。

$usersComputer | ForEach-Object {
    $cn = $_
        $comp = Test-Path \\$cn\c$\users\$username
    [PSCustomObject]@{ 
        Computer = $cn
        Status = if ($componline) { 'Online' } else { 'Offline' }
    }

}

1 个答案:

答案 0 :(得分:0)

$usersComputer将包含一组对象,每个对象的属性名称都与CSV中的列相匹配。您尚未提供CSV的示例。因此,如果它有一个名为ComputerName的列,您可能会执行以下操作:

$usersComputer | ForEach-Object {
    $cn = $_.ComputerName
    $path = "\\$cn\c$\users\$name"
    $componline = Test-Path $path
    [PSCustomObject]@{
        Computer = $cn
        Status = if ($componline) { 'Online' } else { 'Offline' }
    }
}