我正在执行一个稍微不寻常的任务,因为我正在运行执行各种任务的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。
预先感谢
答案 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 }
上面的方法似乎是使用变量将字符串连接起来,然后选择正确的信息,距离更近但仍然不完全正确