从批处理文件运行Powershell命令以重命名网络驱动器

时间:2018-10-10 13:39:10

标签: powershell batch-file

由于“标签”不起作用,我试图创建一个批处理文件来重命名网络驱动器。我已经创建了一个可以正常工作的PS1脚本,但是我试图将该脚本放入一个批处理文件中,以便我可以运行处理多个顺序的非Powershell命令。我的PS1如下:

$ShellObject = New-Object –ComObject Shell.Application
$DriveMapping = $ShellObject.NameSpace('Z:')
$DriveMapping.Self.Name = 'DataStore'

我当前的批处理文件命令如下:

powershell -Command " $ShellObject = New-Object –ComObject Shell.Application; $DriveMapping = $ShellObject.NameSpace('Z:'); $DriveMapping.Self.Name = 'DataStore'"

这给了我以下错误:

Powershell CLI Error

在此对象上找不到属性“名称”。确认该属性存在并且可以设置...

我最初关于如何处理此问题的参考来自此处:How to run powershell command in batch file,其中包括&符。

当我无法使用它时,我在这里尝试了以下格式:Run powershell command from cmd

在这一点上,我尝试了几种不同的分号,引号,撇号等排列,但均未成功。这似乎是一个简单的问题,感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

$DriveMapping变量总是出现在$null

C:>type drivemap.bat
powershell -NoProfile -Command ^
    "$ShellObject = New-Object -ComObject Shell.Application;" ^
    "$DriveMapping = $ShellObject.NameSpace('Z:');" ^
    "$DriveMapping -eq $null;" ^
    "$DriveMapping.Self.Name = 'DataStore'"

因此,Name属性不可用。

C:>powershell -NoProfile -Command     "$ShellObject = New-Object -ComObject Shell.Application;"     "$DriveMapping = $ShellObject.NameSpace('Z:');"     "$DriveMapping -eq $null;"     "$Drive
Mapping.Self.Name = 'DataStore'"
True
The property 'Name' cannot be found on this object. Verify that the property exists and can be set.
At line:1 char:128
+ ... 'Z:'); $DriveMapping -eq $null; $DriveMapping.Self.Name = 'DataStore'
+                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound

诸如$DriveMapping之类的变量不会在PowerShell调用之间持久存在。再次运行PowerShell时,$DriveMapping变量不存在。