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

Powershell test-path against variable contents

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

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

期望的输出:

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

以下会将答案记录为错误。然而,这是针对 3 台机器的一个答案。当我测试 $userscomputer 变量时,它确实包含 computernames 的列表,其中一些在线。

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

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

$componline = test-path $path

$componline

csv 文件有 2 列 "Host Name " "Logged User" 主机名下的计算机名称和登录用户下的广告名称 计算机1双卡 计算机2双卡 computer3 维达

理想情况下我想显示哪台电脑在线我的想法在下面

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

}

它输出如下,但是计算机 3 应该报告为 true ans $cn 变量未显示。

失败 失败的 失败

我已经重新调整了您的解决方案,现在效果很好。 CSV 文件的导入已经完成,因此变量具有计算机名称。在下面工作之后。

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

}

$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' }
    }
}