在PowerShell中使用变量的Net Use和ForEach

时间:2018-07-27 08:41:28

标签: powershell sccm

我正在执行一个稍微不寻常的任务,因为我正在运行执行各种任务的PowerShell脚本。任务的第一步要求我使用NET USE(在旧的XP设备上)映射网络驱动器。我有一个设备列表,一个CSV中的IP,但是在使用Foreach时很难从CSV中提取设备名称,因为我将ForEach循环中的变量嵌入了网络使用路径中命令,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检索列值并将其嵌入到网络使用行中吗?

否则我认为这可能有效:

$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。

预先感谢

2 个答案:

答案 0 :(得分:2)

在字符串中展开$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

答案 1 :(得分:0)

ForEach ($dev in $devs) {
              & Net Use * "\\" + $dev.Device + "\c$" /user:admin P@ssw0rd }

上面的方法似乎是使用变量将字符串连接起来,然后选择正确的信息,距离更近但仍然不完全正确