【问题标题】:Powershell test-path against variable contents针对变量内容的 Powershell 测试路径
【发布时间】:2016-02-23 20:21:38
【问题描述】:

我已将计算机名称列表从 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 列 主机名下的“主机名”“登录用户”计算机名称和登录用户下的广告名称 电脑1双卡 电脑2双卡 电脑3维德

理想情况下,我想显示哪台计算机在线,我的想法如下

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

}

【问题讨论】:

    标签: powershell powershell-4.0


    【解决方案1】:

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

    【讨论】:

    • csv 文件有 2 列,1 列称为登录用户,1 列称为主机名。我在下面使用仅提取主机名 $usersComputer = import-csv C:\Users\bicard\Desktop\csvMergeTest\sheet3.csv |?{$_."Logged User" -eq $name }|%{$_."主机名"}
    • 我已经用我的更新编辑了原始帖子,谢谢
    • 该解决方案有效,我只需要调整几件事,我已经编辑了帖子。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多