为什么我的zip文件保存在system32而不是我目前的目录?

时间:2017-09-27 17:13:52

标签: windows powershell command-line

我目前有一个脚本,它将从我所在的目录中获取文件,将它们复制到同一目录中的文件夹,然后将其压缩到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文件吗?

1 个答案:

答案 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)
}