亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

PowerShell中運行CMD命令的技巧總結(解決名稱沖突和特殊字符等問題)

2020-03-26 19:24:44
字體:
來源:轉載
供稿:網友

引言

我從老舊的 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 的新語法“–%”

 

在 PowerShell v3 中有另一種選擇來解決這個問題。您只需在命令行的任意位置添加 –% 序列(兩個短劃線和一個百分號)PowerShell 就不會再去解析剩下的部分。
我們的例子里,您可以這樣用:

復制代碼 代碼如下:

PS C:/> ICACLS.EXE --% C:/TEST /GRANT USERS:(F)
processed file: C:/TEST
Successfully processed 1 files; Failed processing 0 files

也可以這樣用:
復制代碼 代碼如下:

PS C:/> ICACLS.EXE C:/TEST --% /GRANT USERS:(F)
processed file: C:/TEST
Successfully processed 1 files; Failed processing 0 files

 

方案 2D:使用等效的 PowerShell

使用等效的 PowerShell 也是種選擇。ICACLS.EXE 可以用 Set-ACL 代替。可以從這篇博客中找到更多的 Set-ACL 例子。

混搭

這里展示如何讓您安全地享受 PowerShell 結合您的舊命令帶來的靈活性。您可能會學到幾個技巧并以全新的方式開始新老結合。

例如您能用靈活的 Get-Service 通配符代替 SC.EXE 里晦澀選項:

復制代碼 代碼如下:
Get-Service LAN* | % { $_.Name; SC.EXE SDSHOW $_.Name }

或者您可以使用 PowerShell 的 Get-Item(別名 Dir)過濾文件子集傳遞給 ICACLS.EXE 來處理:
復制代碼 代碼如下:
DIR C:/TEST -Recurse | ? {$_.Length -ge 1MB} | % { ICACLS.EXE $_.FullName /Grant Administrator:`(F`) }

您甚至可以循環遍歷幾個數并結合好用的 FSUTIL.EXE 來創建一批大小不同的文件用于測試項目:
復制代碼 代碼如下:
1..100 | % { FSUTIL.EXE FILE CREATENEW C:/TEST/FILE$_.TXT ($_*10KB)


尾聲

事到如今,您可能已經確信 Windows PowerShell 是管理員的好朋友啦。然而您可能因為有些舊命令帶著古怪的名字或參數而不能使用 POWERSHELL.EXE。我非常鼓勵您使用這些技巧來徹底停用 CMD.EXE 并永久遷移到 PowerShell 來作為您主要的 shell。

文章出處:http://www.pstips.net/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲淫片在线视频| 538国产精品一区二区免费视频| 亚洲自拍偷拍色图| 亚洲性69xxxbbb| 久久精品国产清自在天天线| 亚洲国产成人久久综合一区| 欧美噜噜久久久xxx| 国产网站欧美日韩免费精品在线观看| 日本中文字幕久久看| 96sao精品视频在线观看| 久久久久久亚洲精品不卡| 欧美午夜精品久久久久久人妖| 欧美亚州一区二区三区| 国产精品高潮呻吟久久av野狼| 国产精品免费久久久久久| 亚洲精品欧美一区二区三区| 亚洲精品综合久久中文字幕| 91精品国产高清久久久久久久久| 欧美成人三级视频网站| 欧美极度另类性三渗透| 日韩电影免费观看中文字幕| 91av在线不卡| 在线精品国产成人综合| 亚洲男人天堂视频| 亚洲精品日韩丝袜精品| 国产精品成人一区二区三区吃奶| 欧美一区二三区| 亚洲精品在线观看www| 欧美日韩午夜视频在线观看| 成人综合国产精品| 日韩国产在线看| 九九视频这里只有精品| 欧美一级bbbbb性bbbb喷潮片| 欧美日韩国产页| 亚洲国产成人爱av在线播放| 欧美性xxxx极品hd满灌| 欧美超级免费视 在线| 亚洲天堂av电影| 久久久中精品2020中文| 日韩av日韩在线观看| 国模视频一区二区| 精品国产91久久久| 亚洲最大av网| 午夜精品久久久久久久99热浪潮| 亚洲女人被黑人巨大进入al| 日韩有码在线播放| 国产999精品| 欧美国产视频一区二区| 久久久久久久久久久久久久久久久久av| 欧美黄色性视频| 国产精品视频一| 欧美理论电影在线观看| 亚洲一区第一页| 欧美成人午夜激情视频| 亚洲少妇中文在线| 国产精品18久久久久久麻辣| 日韩精品久久久久久久玫瑰园| 一本色道久久88精品综合| 国产精品18久久久久久麻辣| 91精品国产综合久久香蕉922| 欧美日韩国产91| 日韩女优在线播放| 亚洲精品一区中文| 深夜福利一区二区| 国产精品一区二区久久久久| 国产日韩欧美在线| 久久国产精品影视| 精品久久久999| 久久人人爽人人爽人人片av高清| 欧美日韩在线免费| 欧美孕妇与黑人孕交| 亚洲老板91色精品久久| 懂色aⅴ精品一区二区三区蜜月| 日韩大片在线观看视频| 狠狠躁夜夜躁人人爽天天天天97| 国产手机视频精品| 日韩精品中文字幕视频在线| 日韩av电影在线免费播放| 亚洲a级在线播放观看| 一个人看的www欧美| 91精品国产91久久久久久久久| 国产福利视频一区二区| 亚洲综合国产精品| 国产精品久久97| 韩国欧美亚洲国产| 亚洲欧美精品一区| 欧美性xxxxxxxxx| 久久99精品久久久久久青青91| 欧美肥婆姓交大片| 久久久久久久久爱| 国产亚洲欧洲黄色| 日韩在线观看免费全| 91日本在线观看| 青草热久免费精品视频| 亚洲免费视频观看| **欧美日韩vr在线| 国产精品白丝jk喷水视频一区| 亚洲第一免费播放区| 亚洲成人黄色在线观看| 欧美性开放视频| 欧美重口另类videos人妖| 欧美性猛交xxxx乱大交极品| 97视频在线播放| 日韩精品在线观看视频| 国产成人综合久久| 亚洲国产成人精品久久| 国产精品精品一区二区三区午夜版| 久久99国产综合精品女同| 日韩av在线网页| 国产精品久久9| 日韩成人中文字幕| 亚洲欧美日本伦理| 免费91在线视频| 97精品国产97久久久久久春色| 久久精品视频99| 欧美日韩国产第一页| 91禁国产网站| 精品福利在线看| 中文字幕亚洲天堂| 国产一区二区三区在线免费观看| 欧美人在线视频| 亚洲图片制服诱惑| 在线观看精品自拍私拍| 国产自产女人91一区在线观看| 日韩一区二区在线视频| 日韩av综合网站| 成人黄色大片在线免费观看| 国产精品一区=区| 91av在线国产| 狠狠躁夜夜躁人人爽天天天天97| 国产剧情日韩欧美| 久久国产精品亚洲| 欧美一级电影在线| 午夜欧美不卡精品aaaaa| 欧美电影在线观看完整版| 日产日韩在线亚洲欧美| 成人免费在线视频网站| 国产欧美在线看| 久久人人爽人人爽人人片av高请| 日本精品久久久| 97精品伊人久久久大香线蕉| 亚洲国产精品久久91精品| 亚洲精品美女在线观看播放| 亚洲国产精品va在线看黑人动漫| 一区三区二区视频| 日韩av一卡二卡| 国产乱人伦真实精品视频| 高潮白浆女日韩av免费看| 日韩成人中文字幕| 国产在线播放不卡| 色综合天天综合网国产成人网| 国产亚洲成精品久久| 日韩美女免费线视频| 欧美噜噜久久久xxx| 国产精品视频一区二区高潮| 国产91精品久久久久久| 久久久久久久久久久国产| 亚洲欧美中文在线视频| 国产精品美女午夜av| 最近2019中文免费高清视频观看www99| 亚洲奶大毛多的老太婆| 中日韩美女免费视频网站在线观看| 在线观看不卡av| 欧美精品在线观看91|