引言
我從老舊的 CMD.EXE 命令行換到優秀的 POWSERSHELL.EXE 已經有一段時間啦。您可能知道新的 Windows PowerShell 可以運行任何舊命令。不過有些舊命令的名稱或語法可能會產生問題。但這都不是事兒。
麻煩 1:名稱沖突
PowerShell 的 cmdlet 別名和舊命令的名稱有沖突是個常見的問題。比如說您喜歡的服務控制命令 SC.EXE。SC.EXE 非常靈活!我能理解您為什么喜歡它(不要為用 NET.EXE 管理服務找借口)。如果您想查看 SMB Server 服務的狀態,可以在 CMD.EXE 里這樣用:
復制代碼 代碼如下:
C:/>SC QUERY LANMANSERVER
SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
如果您在 PowerShell 中嘗試同樣的事,會得到:
復制代碼 代碼如下:
PS C:/> SC QUERY LANMANSERVER
Set-Content : Access to the path 'C:/QUERY' is denied.
At line:1 char:1
+ SC QUERY LANMANSERVER
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:/QUERY:String) [Set-Content], UnauthorizedAccessException
+ FullyQualifiedErrorId : GetContentWriterUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetContentCommand
因為 SC 是 Set-Content 的別名。它優先于 SC.EXE 文件。
方案 1A:使用 .EXE 擴展名
為了克服這個問題,您可以簡單地將 .EXE 擴展名包含進舊命令。這消除了歧義并使相同的命令在 CMD.EXE 和 PowerShell 里都能用。還可以清楚告訴使用您腳本的人這里用的是舊 .EXE 命令而非 PowerShell 別名。
復制代碼 代碼如下:
PS C:/> SC.EXE QUERY LANMANSERVER
SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
方案 1B:使用 CMD /C
另一個辦法是把您的命令用引號括起讓 CMD.EXE 來運行。但這樣做沒啥效率,僅僅為了執行您的命令就得運行一個 CMD.EXE 實例。
復制代碼 代碼如下:
PS C:/> CMD /C "SC QUERY LANMANSERVER"
SERVICE_NAME: LANMANSERVER
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
方案 1C:用等效的 PowerShell
很多情況下,可以用 PowerShell cmdlet 來代替您的舊命令。
例如這里您就可以直接使用 Get-Service:
復制代碼 代碼如下:
PS C:/> Get-Service LANMANSERVER | FL
Name : LANMANSERVER
DisplayName : Server
Status : Running
DependentServices : {Browser}
ServicesDependedOn : {SamSS, Srv}
CanPauseAndContinue : True
CanShutdown : False
CanStop : True
ServiceType : Win32ShareProcess
麻煩 2:PowerShell 的特殊字符
有時舊命令的參數使用的字符在 PowerShell 里有特殊意義。
比如您想讓某個目錄被所有用戶完全控制。在 CMD.EXE 里您可以這樣做:
復制代碼 代碼如下:
C:/>ICACLS.EXE C:/TEST /GRANT USERS:(F)
processed file: C:/TEST
Successfully processed 1 files; Failed processing 0 files
在 CMD.EXE 做這些沒問題,但如果你在 PowerShell 運行就會報錯:
復制代碼 代碼如下:
PS C:/> ICACLS.EXE C:/TEST /GRANT USERS:(F)
The term 'F' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:34
+ ICACLS.EXE C:/TEST /GRANT USERS:(F)
+ ~
+ CategoryInfo : ObjectNotFound: (F:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundExceptionn
試圖給名字以 $ 結尾的電腦對象授權時也會引起一個類似的錯誤。
復制代碼 代碼如下:
PS C:/> ICACLS.EXE C:/TEST /GRANT COMPUTERNAME$:(F)
At line:1 char:39
+ ICACLS.EXE C:/TEST /GRANT COMPUTERNAME$:(F)
+ ~~
Invalid variable reference. '$' was not followed by a valid variable name character. Consider using ${} to delimit the
name.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidVariableReference
這個問題是因為括號和美元符在 PowerShell 中都有特殊意義。例如大括號之類常用字符也會引發相似的沖突。也有幾種不同的方案來解決這個問題。
方案 2A:使用 CMD /C
和第一個問題一樣,你可以引號括起您的命令交給 CMD.EXE 來處理。先不考慮效率,PowerShell 不會去解析引號里的字符串,這樣就能正常工作。
復制代碼 代碼如下:
PS C:/> CMD.EXE /C "ICACLS.EXE C:/TEST /GRANT USERS:(F)"
processed file: C:/TEST
Successfully processed 1 files; Failed processing 0 files
方案 2B:使用 PowerShell 的轉義字符
對于這個方案,您必須先知道使用的字符哪些對 PowerShell 有特殊意義。然后在它們每一個前面加上個反引號(`),它就是 PowerShell 的轉義字符。這個方案的主要問題是你必須知道哪些字符需要轉義,這讓讀寫您的腳本更困難。
我們的例子里,你需要處理 ( 和 ) 這兩個字符:
復制代碼 代碼如下:
PS C:/> ICACLS.EXE C:/TEST /GRANT USERS:`(F`)
processed file: C:/TEST
Successfully processed 1 files; Failed processing 0 files
方案 2C:使用 PowerShell v3 的新語法“亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内揄拍国内精品|
国产精品免费久久久久久|
日本中文字幕成人|
日韩在线高清视频|
伊人久久久久久久久久久|
久久亚洲欧美日韩精品专区|
久久久精品日本|
国产精品国模在线|
青草青草久热精品视频在线网站|
欧美成人三级视频网站|
日韩在线播放av|
91精品国产综合久久香蕉最新版|
国产aaa精品|
国产精品成人va在线观看|
国产一区二区日韩|
亚洲成人av在线|
亚洲国产精品国自产拍av秋霞|
亚洲欧美变态国产另类|
中文字幕精品www乱入免费视频|
97av在线播放|
国产午夜精品免费一区二区三区|
欧美老女人性视频|
中文字幕日韩在线观看|
中文.日本.精品|
久久99久久99精品中文字幕|
国产一区二区动漫|
国产91精品青草社区|
欧美激情视频网址|
国产午夜精品全部视频播放|
亚洲性夜色噜噜噜7777|
国产在线播放91|
久久久久久久久久久久久久久久久久av|
欧美激情伊人电影|
一夜七次郎国产精品亚洲|
国产亚洲在线播放|
成人免费网站在线看|
久久精品99久久香蕉国产色戒|
欧美一区二区大胆人体摄影专业网站|
欧美一级淫片播放口|
都市激情亚洲色图|
国产91精品久久久久久|
91在线精品视频|
97在线观看视频国产|
亚洲国产成人91精品|
国产精品爱啪在线线免费观看|
欧洲亚洲女同hd|
亚洲精品永久免费精品|
少妇精69xxtheporn|
国产精品中文字幕在线|
91高清免费视频|
国产mv免费观看入口亚洲|
激情懂色av一区av二区av|
日韩精品免费在线视频|
5252色成人免费视频|
久久久久久久久久久久av|
久久国产精品久久国产精品|
精品久久久久久中文字幕一区奶水|
国产精品成人av性教育|
最新69国产成人精品视频免费|
久久精品国产成人|
久久久久久亚洲精品|
国产精品久久久久久久一区探花|
91在线精品视频|
国产一区二区日韩|
中文字幕免费国产精品|
日韩极品精品视频免费观看|
成人欧美在线观看|
国产精品中文字幕在线|
伊人久久综合97精品|
国产精品成久久久久三级|
欧美有码在线观看视频|
精品无码久久久久久国产|
热久久免费国产视频|
久久影视免费观看|
毛片精品免费在线观看|
国产欧美 在线欧美|
福利一区福利二区微拍刺激|
国产精品海角社区在线观看|
欧美大成色www永久网站婷|
亚洲精品久久久一区二区三区|
欧美伊久线香蕉线新在线|
久久久在线观看|
久热精品在线视频|
57pao成人永久免费视频|
美日韩精品免费视频|
亚洲黄页视频免费观看|
欧美精品在线免费播放|
欧美成人午夜激情在线|
久热精品视频在线观看一区|
亚洲三级 欧美三级|
久久成人综合视频|
亚洲一区二区精品|
欧美猛交ⅹxxx乱大交视频|
亚洲图片在区色|
精品小视频在线|
亚洲跨种族黑人xxx|
国产视频在线一区二区|
欧美日韩综合视频|
欧美国产日韩一区二区三区|
亚洲а∨天堂久久精品喷水|
欧美激情第99页|
日本亚洲欧洲色α|
亚洲免费伊人电影在线观看av|
亚洲一区第一页|
一区二区av在线|
国内揄拍国内精品|
国产精品狠色婷|
日韩美女视频在线观看|
国产亚洲精品日韩|
日韩一区二区三区国产|
国产精品热视频|
蜜月aⅴ免费一区二区三区|
成人免费大片黄在线播放|
91热福利电影|
少妇高潮久久77777|
日韩精品免费在线视频观看|
日本一区二区在线免费播放|
欧美美女15p|
欧美日韩免费网站|
日韩精品中文字幕久久臀|
成人性生交xxxxx网站|
欧美韩日一区二区|
最新国产精品亚洲|
日韩av大片在线|
亚洲精品久久久一区二区三区|
亚洲自拍小视频免费观看|
成人免费高清完整版在线观看|
国内成人精品视频|
91亚洲精品久久久久久久久久久久|
亚洲最新视频在线|
97人洗澡人人免费公开视频碰碰碰|
成人免费视频在线观看超级碰|
欧美色播在线播放|
久久久久国产精品一区|
久久精品国产一区二区电影|
亚洲电影成人av99爱色|
操人视频在线观看欧美|
久久这里有精品视频|
日韩国产在线看|
伊人久久大香线蕉av一区二区|
57pao国产精品一区|
亚洲第一区在线观看|
亚洲国产欧美一区二区三区久久|
欧美视频国产精品|
亚洲热线99精品视频|
亚洲成avwww人|
国产精品久久av|
国产一区二区三区三区在线观看|
中文字幕精品—区二区|
欧美在线视频播放|
欧美大码xxxx|
懂色av中文一区二区三区天美|
亚洲人成网站在线播|
97**国产露脸精品国产|
中文字幕亚洲欧美日韩高清|
日本成人在线视频网址|
久久久成人精品视频|
日韩精品久久久久久久玫瑰园|
欧美在线国产精品|
亚洲乱码国产乱码精品精|
国产精品亚洲аv天堂网|
激情懂色av一区av二区av|
国产精品入口福利|
亚洲精品白浆高清久久久久久|