首页 > 解决方案 > Net Use 和 ForEach 与 PowerShell 中的变量

问题描述

我正在执行一个稍微不寻常的任务,因为我正在运行一个执行各种任务的 PowerShell 脚本。任务的一个步骤需要我使用NET USE(在旧 XP 设备上)映射网络驱动器。我有一个 CSV 中的设备、IP 列表,但是,当使用 Foreach 时,我正在努力从 CSV 中提取设备名称,我将ForEach循环中的变量嵌入到 net use 命令的路径中,并且,PowerShell 是没有按照我的期望解释它。

CSV: Column 1 = Device, Column 2 = IP

代码:

$Site = "ABC"
$mapdevs = Import-Csv "C:\DEVS\$Site.csv"
          ForEach ($dev in $mapdevs) {
          & Net Use * \\$dev.Device\c$ /user:admin P@ssw0rd }

有谁知道我如何从 CSV 中检索列值并嵌入到 net use 行中?

否则我认为这可能有效:

$Site = "ABC"
$mapdevs = Import-Csv "C:\DEVS\$Site.csv"
          ForEach ($dev.Device in $mapdevs) {
          & Net Use * \\$dev.Device\c$ /user:admin P@ssw0rd }

绝对不适合作为第二次尝试。我不能使用 New-PSDrive,因为端点系统不支持 WMF。

提前致谢

标签: powershellsccm

解决方案


在字符串中扩展 a$Variable.Property时,您必须使用封闭$() 来强制评估,否则只会$Variable扩展并.Property视为文本。您可能需要$使用反引号来转义文字。

所以使用

& Net Use * ("\\$($dev.Device)\c`$") /user:admin P@ssw0rd

或者使用-f格式运算符

& Net Use * ("\\{0}\c`$" -f $dev.Device) /user:admin P@ssw0rd

连接也应该起作用:

& Net Use * ("\\"+$dev.Device+"\c`$") /user:admin P@ssw0rd

推荐阅读