微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在特殊的PowerShell链命令4命令提示符?

通常,PowerShell命令可以用分号链接。 以下打开2个记事本:

PS> notepad; notepad

你也可以链接一个更复杂的语句:

PS> Add-Type -AssemblyName System.IO.Compression; ` > $src = "C:aFolder"; $zip="C:my.zip"; ` > [io.compression.zipfile]::CreateFromDirectory($src,$zip)

链式PowerShell命令也可以从CMD命令行调用

C:> powershell notepad; notepad

本文描述了一个创build.Net 4.0 PowerShell提示符的方法,即使.Net 2.0是您的操作系统上的活动框架。 您创build一个.cmd脚本,并运行该脚本。 现在你在.Net 4.0环境中。

如何从桌面应用程序打开Windows资源pipe理器和search?

如何模拟慢读和慢读磁盘驱动器

如何查看是否对文件文件夹select“包含可inheritance的权限”?

什么是Windows编程和它的前进方向? 老实说win32死了,不是吗?

从控制台进程读取

链接也适用于4.0提示

C:> ps4.cmd PS> notepad; notepad

也可以从标准CMD提示符下运行:

C:> ps4 notepad; notepad

本文描述了一种将Add-Type到显式path名的方法(需要从ps4提示符引用4.0程序集):

Add-Type -Path "C:WindowsMicrosoft.NETassemblyGAC_MSILSystem.IO.Compression.FileSystemv4.0_4.0.0.0__b77a5c561934e089System.IO.Compression.FileSystem.dll"

即使在ps4提示符处链接时,也是如此:

C:> ps4 PS> Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; ` > $src = "C:xxl"; $zip="C:xxl.zip"; ` > [io.compression.zipfile]::CreateFromDirectory($src,$zip)

问题:在标准命令提示符下启动ps4时,链接上述语句失败(错误已完全显示文章底部):

C:> ps4 Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; $src = "C:xxl"; $zip="C:xxl.zip"; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

但是,以上所有方法都有效。 为什么? 我怎样才能做这个工作?

术语“C: x xl”不被识别为cmdlet,函数,脚本的名称

文件或可操作的程序。 检查名称的拼写,或者path是

包括,validationpath是正确的,然后再试一次。

在线:1个字符:73

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl <<<<; $拉链= C: X xl.zip;

[io.compression.zipfile] :: CreateFromDirectory($ src,$ zip)

+ CategoryInfo:ObjectNotFound:(C: x xl:String)[],CommandNotFoundException

+ FullyQualifiedErrorId:CommandNotFoundException

术语'C: x xl.zip'不被识别为cmdlet的名称函数

脚本文件或可操作的程序。 检查名称的拼写,或者path

包括在内,请validationpath是否正确,然后重试。

在线:1个字符:91

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl; $ zip = C: x xl.zip <<<<;

[io.compression.zipfile] :: CreateFromDirectory($ src,$ zip)

+ CategoryInfo:ObjectNotFound:(C: x xl.zip:String)[],CommandNotFoundException

+ FullyQualifiedErrorId:CommandNotFoundException

使用“2”参数调用“CreateFromDirectory”exception:“path不是

的法律forms“。

在线:1 char:138

+ Add-Type -Path C: x System.IO.Compression.FileSystem.dll; $ src = C: x xl; $拉链= C: X xl.zip;

[io.compression.zipfile] :: CreateFromDirectory <<<<($ src,$ zip)

+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException

+ FullyQualifiedErrorId:DotNetMethodException

我如何告诉Windows预取文件

为什么不同的计算机或操作系统上的文化date格式不同?

你如何保护自己免受内存消耗失控打破个人电脑?

Windows服务不能在冷启动时启动

Windowslogin的“使用条件”对话框

将菊花链命令传递到powershell.exe时,将删除字符串周围的双引号。 Add-Type不受此影响,因为路径不包含空格,所以它不需要引号:

Add-Type -Path C:xSystem.IO.Compression.FileSystem.dll # <- this works

但是,在一个赋值操作中,PowerShell需要将字符串用引号括起来,否则会将该字符串解释为命令并尝试执行它:

$src = C:xxl # <- this would try to run a (non-existent) command 'C:xxl' # and assign its output to the variable instead of assigning # the string "C:xxl" to the variable

这是导致您观察到的前两个错误的原因。 第三个错误是后续错误,因为两个路径变量未正确初始化。

你应该能够通过转义双引号来避免这种行为:

ps4 Add-Type -Path "C:xSystem.IO.Compression.FileSystem.dll"; $src = "C:xxl"; $zip="C:xxl.zip"; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

或者用单引号替换它们(因为后者不被CMD识别为引用字符,因此按原样传递给PowerShell,它将它们识别为引号字符):

ps4 Add-Type -Path 'C:xSystem.IO.Compression.FileSystem.dll'; $src = 'C:xxl'; $zip='C:xxl.zip'; [io.compression.zipfile]::CreateFromDirectory($src,$zip)

但是,我建议不要解决这个问题,而是建议并运行适当的PowerShell脚本,以便完全避免这个问题:

#requires -version 4 [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [string]$Path,[Parameter(Mandatory=$true)] [string]$Zipfile,) Add-Type -Assembly 'System.IO.Compression.FileSystem' | Out-Null [IO.Compression.ZipFile]::CreateFromDirectory($Path,$Zipfile)

脚本将像这样运行:

powershell.exe -File zip.ps1 -Path "C:xxl" -Zipfile "C:xxl.zip"

如果将执行策略更改为RemoteSigned或Unrestricted ,并且更改.ps1文件认处理程序,则甚至可以像这样运行脚本:

zip.ps1 -Path "C:xxl" -Zipfile "C:xxl.zip"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐