最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年05月07日 11:42:54   作者:  
這篇文章主要介紹了PowerShell中運行CMD命令的技巧總結(jié)(解決名稱沖突和特殊字符等問題),需要的朋友可以參考下

引言

我從老舊的 CMD.EXE 命令行換到優(yōu)秀的 POWSERSHELL.EXE 已經(jīng)有一段時間啦。您可能知道新的 Windows PowerShell 可以運行任何舊命令。不過有些舊命令的名稱或語法可能會產(chǎn)生問題。但這都不是事兒。

麻煩 1:名稱沖突

PowerShell 的 cmdlet 別名和舊命令的名稱有沖突是個常見的問題。比如說您喜歡的服務(wù)控制命令 SC.EXE。SC.EXE 非常靈活!我能理解您為什么喜歡它(不要為用 NET.EXE 管理服務(wù)找借口)。如果您想查看 SMB Server 服務(wù)的狀態(tài),可以在 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 的別名。它優(yōu)先于 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 來運行。但這樣做沒啥效率,僅僅為了執(zhí)行您的命令就得運行一個 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 的特殊字符

有時舊命令的參數(shù)使用的字符在 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

試圖給名字以 $ 結(jié)尾的電腦對象授權(quán)時也會引起一個類似的錯誤。
復制代碼 代碼如下:

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 中都有特殊意義。例如大括號之類常用字符也會引發(fā)相似的沖突。也有幾種不同的方案來解決這個問題。

方案 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 的轉(zhuǎn)義字符

對于這個方案,您必須先知道使用的字符哪些對 PowerShell 有特殊意義。然后在它們每一個前面加上個反引號(`),它就是 PowerShell 的轉(zhuǎn)義字符。這個方案的主要問題是你必須知道哪些字符需要轉(zhuǎn)義,這讓讀寫您的腳本更困難。
我們的例子里,你需要處理 ( 和 ) 這兩個字符:

復制代碼 代碼如下:

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 結(jié)合您的舊命令帶來的靈活性。您可能會學到幾個技巧并以全新的方式開始新老結(jié)合。

例如您能用靈活的 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`) }

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


尾聲

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

文章出處:http://www.pstips.net/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters.html

相關(guān)文章

  • Powershell中調(diào)用郵件客戶端發(fā)送郵件的例子

    Powershell中調(diào)用郵件客戶端發(fā)送郵件的例子

    這篇文章主要介紹了Powershell中調(diào)用郵件客戶端發(fā)送郵件的例子,需要的朋友可以參考下
    2014-05-05
  • PowerShell使用match操作符來篩選數(shù)組

    PowerShell使用match操作符來篩選數(shù)組

    本文介紹PowerShell中使用match操作符,配合正則表達式從數(shù)組中篩選出想要的內(nèi)容,需要的朋友可以參考下
    2016-11-11
  • powershell玩轉(zhuǎn)sqlite數(shù)據(jù)庫詳細介紹

    powershell玩轉(zhuǎn)sqlite數(shù)據(jù)庫詳細介紹

    這篇文章主要為大家分享一下powershell玩轉(zhuǎn)sqlite數(shù)據(jù)庫的一些資料,內(nèi)容非常詳細,需要的朋友可以參考下
    2017-10-10
  • 原創(chuàng)powershell腳本小工具ctracert.ps1跟蹤路由(win8以上系統(tǒng))

    原創(chuàng)powershell腳本小工具ctracert.ps1跟蹤路由(win8以上系統(tǒng))

    這篇文章主要介紹了原創(chuàng)powershell腳本小工具ctracert.ps1跟蹤路由(win8以上系統(tǒng)),需要的朋友可以參考下
    2017-10-10
  • Windows Powershell 進行數(shù)學運算

    Windows Powershell 進行數(shù)學運算

    在Windows PowerShell中, 使用數(shù)學運算符來進行數(shù)學運算,數(shù)學運算符允許你在命令參數(shù)中計算數(shù)值. 你可以使用一個或者多個運算符進行加減乘除法, 也可以返回除法的余數(shù)(模). 包含這些計算的參數(shù), 將計算結(jié)果作為參數(shù)值. 命令就像處理其他類型參數(shù)一樣, 來處理參數(shù)值.
    2014-08-08
  • powershell常用命令分類

    powershell常用命令分類

    本文創(chuàng)建了powershell常用命令 ,主要分為get類、set類、write類三大類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2014-10-10
  • PowerShell腳本性能優(yōu)化技巧總結(jié)

    PowerShell腳本性能優(yōu)化技巧總結(jié)

    這篇文章主要介紹了PowerShell腳本性能優(yōu)化技巧總結(jié),一些PowerShell腳本可能很容易消耗很多內(nèi)存,或者運行太多時間,甚至兼而有之,本文會分享幾個PowerShell小技巧來提高這一類腳本的性能,需要的朋友可以參考下
    2014-05-05
  • PowerShell腳本開發(fā)之嘗試登錄ftp

    PowerShell腳本開發(fā)之嘗試登錄ftp

    本文和后續(xù)的文章將會試圖通過PowerShell實現(xiàn)對上述潛在攻擊點的弱密碼嘗試,本文首先針對ftp的密碼嘗試。記錄下全過程,有需要的朋友可以參考下。
    2014-10-10
  • Powershell的break、continue和return簡單總結(jié)

    Powershell的break、continue和return簡單總結(jié)

    這篇文章主要介紹了Powershell的break、continue和return簡單總結(jié),和其它語言中的作用相同,所以本文的總結(jié)比較短小,需要的朋友可以參考下
    2014-07-07
  • Powershell中阻止”確認提示”的方法

    Powershell中阻止”確認提示”的方法

    這篇文章主要介紹了Powershell中阻止”確認提示”的方法,本文直接給出操作代碼示例,需要的朋友可以參考下
    2015-03-03

最新評論

临桂县| 习水县| 南澳县| 高州市| 余江县| 阳曲县| 皮山县| 桃源县| 蒙自县| 家居| 岑溪市| 建德市| 榆树市| 大余县| 淳化县| 三门峡市| 马公市| 莆田市| 册亨县| 会宁县| 正镶白旗| 德庆县| 三明市| 铁力市| 双辽市| 上高县| 湘潭县| 余干县| 三河市| 牡丹江市| 若尔盖县| 甘孜县| 鹤壁市| 海晏县| 台前县| 临邑县| 阳原县| 承德县| 开封市| 修文县| 运城市|