无法传递Powershell参数以从Get-ChildItem中排除参数

时间:2017-10-02 18:45:48

标签: powershell

我发现powershell有来自How do I exclude a folder in compress-archive的compress-archive cmdlet;但是,如果我将powershell参数传递给-exclude参数,则它无效。如果它从powershell变量调用它正在工作。我错过了什么吗?请指教。

此脚本无效。这是powershell参数

  

。\ createzipfile.ps1" C:\ temp" " C:\ Myzipdir" myzipfile.zip   '"的web.config"" PageBase.master"'

Param
(
   [string]$source,
   [string]$destination,
   [string]$zipfilename,
   [string]$excludefilepattern
)
cls
$zipfile = $destination + "\" + $zipfilename

$files = Get-ChildItem -Path $source -Exclude $excludefilepattern
# compress
#Compress-Archive -Path $files -DestinationPath $zipfile -CompressionLevel Fastest
Compress-Archive -Path $files -DestinationPath $zipfile -CompressionLevel Fastest

这个脚本正在运行,但我确实需要-beclude从powershell参数传递

  

。\ createzipfile.ps1" C:\ temp" " C:\ Myzipdir" myzipfile.zip

Param
(
    [string]$source,
    [string]$destination,
    [string]$zipfilename

)
cls
$zipfile = $destination + "\" + $zipfilename
$exclude = ("web.config","PageBase.master")
$files = Get-ChildItem -Path $source -Exclude $exclude
# compress

Compress-Archive -Path $files -DestinationPath $zipfile -CompressionLevel Fastest

最诚挚的问候, 安迪Pham

2 个答案:

答案 0 :(得分:0)

我目前无法100%测试这个,但我愿意这样做会为你排序。

在第一个示例中,您的排除参数为:[string]$excludefilepattern

这将接受字符串,并且您传入的是字符串,使其看起来像一个数组。我假设这是因为你在尝试传入真正的数组时遇到了错误?

修复是将该参数表示为能够接受字符串数组:

[string[]]$excludefilepattern

当你提供一个数组时它会工作(注意我已经删除了外部的单引号):

.\createzipfile.ps1 "C:\temp" "C:\Myzipdir" myzipfile.zip "web.config","PageBase.master"

可以帮助解决此类事情的问题是检查您正在使用的cmdlet的帮助页面。对于Get-ChildItem的情况,您会注意到排除列为[-Exclude <String[]>]。方括号让你知道它想要一个类型的数组(在这种情况下是字符串。)

答案 1 :(得分:0)

由于您没有提到每个参数的位置,因此最好使用它命名。当你这样做时,对于你传递的多个文件模式没有任何歧义。当然,不要将模式包含在单引号中。像:

.\createzipfile.ps1 -Source "C:\temp" -Destination "C:\Myzipdir" -Zipfilename myzipfile.zip -ExcludeFilePattern "web.config","PageBase.master"

此外,文件模式不能是字符串。由于您要传递多个,因此它必须是一个数组。最好不要在param块中键入$ ExcludeFilePattern