我发现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
答案 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