PowerShell 中带有变量的 Net Use 和 ForEach

Net Use and ForEach with Variables in PowerShell

我正在执行一项稍微不寻常的任务,因为我是 运行 执行各种任务的 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。

提前致谢

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

以上似乎使用变量和 select 正确信息连接字符串,更接近但仍不完全正确

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