我目前有一个脚本,它将从我所在的目录中获取文件,将它们复制到同一目录中的文件夹,然后将其压缩到example.zip中 - 唯一的问题是当我尝试压缩它们时使用:
Add-Type -AssemblyName System.IO.Compression.FileSystem
function ZipFiles( $zipfilename, $sourcedir )
{
# Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, $zipfilename, $compressionLevel, $false)
}
该zip文件$ zipfilename保存到 C:\ Windows \ system32 ,而不是 C:\ myDir \ env \ filesToZip 我目前所在的位置。知道为什么会发生这种情况而不是在我执行PowerShell脚本的目录中创建zip文件吗?
答案 0 :(得分:1)
作为PetSerAl hints at,在解析相对路径名时,.NET方法将默认为进程的当前工作目录(不一定是powershell的工作目录)。
使用Resolve-Path
使用powershell中的当前位置解析路径:
function ZipFiles( $zipfilename, $sourcedir )
{
$sourcepath = Resolve-Path $sourcedir
if($sourcepath.Provider -ne 'FileSystem'){
throw 'File system path expected for $sourcedir'
}
$destinationpath = Resolve-Path $zipfilename
if($destinationpath.Provider -ne 'FileSystem'){
throw 'File system path expected for $zipfilename'
}
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcepath.ProviderPath, $destinationpath.ProviderPath, $compressionLevel, $false)
}