【发布时间】:2022-01-26 23:47:52
【问题描述】:
我发现这个link 用于在 Windows 下创建 vss Shadow 副本。但是代码使用固定字符串作为参数:
function createVssSnapshot{
[cmdletbinding()]
param(
[string]$targetVolume="C:\",
[string]$accessPath='C:\vssSnapshot',
[bool]$openSnapshotAfter=$true
)
[..]
我想修改它以便更灵活:
function [String]createVssSnapshot{
[cmdletbinding()]
param(
[String]$targetVolume,
[String]$accessPath,
[Bool]$openSnapshotAfter
)
[..]
并使用它调用它
$result = createVssSnapshot("C:\", "C:\vssSnapshot", $false)
但我收到以下错误:
createVssSnapshot : Die Argumenttransformation für den Parameter "targetVolume" kann nicht verarbeitet werden. Der Wert kann nicht in den Typ "System.String" konvertiert werden.
In F:\Powershell_4_Pure\Object_based.ps1:143 Zeichen:28
+ $result = createVssSnapshot("C:\", "C:\vssSnapshot", $false)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [createVssSnapshot], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,createVssSnapshot
很抱歉出现德语错误消息,但 targetVolume 似乎不是 System.String 类型。
我在这里错过了什么?
对于未来的问题:如何修改 PowerShell ISE 以显示英文错误消息?
【问题讨论】:
-
PowerShell 不希望将参数参数作为逗号分隔的列表。将呼叫从
$result = createVssSnapshot("C:\", "C:\vssSnapshot", $false)更改为$result = createVssSnapshot "C:\" "C:\vssSnapshot" -openSnapshotAfter:$false -
简而言之:必须调用 PowerShell 函数、cmdlet、脚本和外部程序-
foo('arg1', 'arg2')。如果您使用,分隔参数,您将构造一个命令将其视为单个参数 的数组。请参阅this answer 了解更多信息。
标签: function powershell arguments visual-sourcesafe