【问题标题】:Run Powershell Command from Batch File to Rename Network Drive从批处理文件运行 Powershell 命令以重命名网络驱动器
【发布时间】:2018-10-10 13:39:09
【问题描述】:

我正在尝试创建一个批处理文件来重命名网络驱动器,因为“标签”不起作用。我创建了一个可以工作的 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

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

【问题讨论】:

  • 您是否检查过$DriveMapping 是否为$null?这就是这里发生的事情。
  • 在这个问题上跳出框框思考,这是我从未尝试过的事情。是否可以通过批处理文件创建 PS1 文件,用 PS 调用 PS1 文件执行 PS1 文件,然后删除创建的 PS1?
  • 我刚刚运行了上面的命令,然后我运行了powershell -Command "$DriveMapping -ne $null"'False'。所以我不认为这个值是空的。 @lit
  • @Backin 我喜欢这个建议作为一种解决方法,如果我无法在 CLI 和 PS 之间进行转换,我会记住它。谢谢。
  • 三 (3) 行 PowerShell 脚本是否从 .ps1 文件按预期运行?

标签: powershell batch-file


【解决方案1】:

$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 变量不存在。

【讨论】:

  • 展开要问的问题,有没有办法在 CLI 中使用 PowerShell,以便在第一次调用期间发生对 $DriveMapping 的第二次调用?
  • PowerShell 的第二次调用重新开始。它不知道来自不同 PowerShell 调用的任何变量。你问的是这个吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 2018-02-14
相关资源
最近更新 更多