Windows 命令 - CMD 和 PowerShell

適用於:✔️ Windows VM

本節包含在您可能需要使用 SAC 存取 Windows VM 的案例中執行常見工作的範例命令,例如當您需要針對 RDP 連線失敗進行疑難解答時。

自 Windows Server 2003 以來,SAC 已包含在所有 Windows 版本中,但預設為停用。 SAC 依賴 sacdrv.sys 核心驅動程式、 Special Administration Console Helper 服務 (sacsvr) 和 sacsess.exe 程式。 如需詳細資訊,請參閱 緊急管理服務工具和設定

SAC 可讓您透過序列埠連線到執行中的 OS。 當您從 SAC 啟動 CMD 時, sacsess.exe 會在執行中的 OS 內啟動 cmd.exe 。 如果您同時透過序列主控台功能連線到 SAC,您可以在 [任務管理器] 中看到。 透過 SAC 存取的 CMD 與您透過 RDP 連線時所使用的 CMD 相同 cmd.exe 。 所有相同的命令和工具都可以使用,包括從該 CMD 實例啟動 PowerShell 的能力。 SAC 與 Windows 復原環境 (WinRE) 之間的主要差異在於,SAC 可讓您管理執行中的 OS,其中 WinRE 會開機進入不同的最小 OS。 雖然 Azure VM 不支援存取 WinRE 的功能,但透過序列主控台功能,Azure VM 可以透過 SAC 進行管理。

由於 SAC 限制為 80x24 螢幕緩衝區,且沒有捲動,因此請新增 | more 至命令,一次顯示一個頁面的輸出。 使用 <spacebar> 查看下一頁,或 <enter> 查看下一行。

SHIFT+INSERT 是序列主控台視窗的貼上快捷方式。

由於 SAC 的螢幕緩衝區有限,在本機文本編輯器中輸入較長的命令可能會比較容易,然後貼到 SAC 中。

使用 CMD 檢視和編輯 Windows 登錄設定

確認 RDP 已啟用

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fDenyTSConnections

只有在設定相關的組策略設定時,才會存在第二個索引鍵 (在 \Policies 下)。

啟用 RDP

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v fDenyTSConnections /t REG_DWORD /d 0

只有在已設定相關的組策略設定時,才需要第二個索引鍵 (在 \Policies 下)。 如果在組策略中設定值,則會在下一次組策略重新整理時重寫此值。

使用 CMD 管理 Windows 服務

檢視服務狀態

sc query termservice

檢視服務登入帳戶

sc qc termservice

設定服務登入帳戶

sc config termservice obj= "NT Authority\NetworkService"

等號之後需要空格。

設定服務啟動類型

sc config termservice start= demand

等號之後需要空格。 可能的起始值包括 boot、、systemautodemanddisableddelayed-auto

設定服務相依性

sc config termservice depend= RPCSS

等號之後需要空格。

啟動服務

net start termservice

sc start termservice

停止服務

net stop termservice

sc stop termservice

使用 CMD 管理網路功能

顯示 NIC 屬性

netsh interface show interface

顯示IP屬性

netsh interface ip show config

顯示IPSec組態

netsh nap client show configuration

啟用 NIC

netsh interface set interface name="<interface name>" admin=enabled

將 NIC 設定為使用 DHCP

netsh interface ip set address name="<interface name>" source=dhcp

如需 的詳細資訊 netsh請按兩下這裡

Azure VM 應該一律在客體 OS 中設定為使用 DHCP 來取得 IP 位址。 Azure 靜態 IP 設定仍會使用 DHCP 將靜態 IP 提供給 VM。

Ping

ping 8.8.8.8

埠 Ping

安裝 telnet 用戶端

dism /online /Enable-Feature /FeatureName:TelnetClient

測試連線能力

telnet bing.com 80

拿掉 telnet 用戶端

dism /online /Disable-Feature /FeatureName:TelnetClient

根據預設,受限於 Windows 中可用的方法時,PowerShell 可能是測試埠連線的較佳方法。 如需範例,請參閱下面的PowerShell一節。

測試 DNS 名稱解析

nslookup bing.com

顯示 Windows 防火牆規則

netsh advfirewall firewall show rule name="Remote Desktop - User Mode (TCP-In)"

停用 Windows 防火牆

netsh advfirewall set allprofiles state off

進行疑難解答時,您可以使用此命令暫時排除 Windows 防火牆。 它會在下一次重新啟動時啟用,或使用下列命令加以啟用時。 請勿停止 Windows 防火牆服務 (MPSSVC) 或基底篩選引擎 (BFE) 服務,以排除 Windows 防火牆。 停止 MPSSVC 或 BFE 會導致所有連線遭到封鎖。

啟用 Windows 防火牆

netsh advfirewall set allprofiles state on

使用 CMD 管理使用者和群組

建立本機用戶帳戶

net user /add <username> <password>

將本機使用者新增至本地組

net localgroup Administrators <username> /add

確認用戶帳戶已啟用

net user <username> | find /i "active"

從一般化映像建立的 Azure VM 會將本機系統管理員帳戶重新命名為 VM 布建期間指定的名稱。 因此,通常不是 Administrator

啟用使用者帳戶

net user <username> /active:yes

檢視用戶帳戶屬性

net user <username>

來自本機系統管理員帳戶的范例行:

Account active Yes

Account expires Never

Password expires Never

Workstations allowed All

Logon hours allowed All

Local Group Memberships *Administrators

檢視本地組

net localgroup

使用 CMD 管理 Windows 事件記錄檔

查詢事件記錄檔錯誤

wevtutil qe system /c:10 /f:text /q:"Event[System[Level=2]]" | more

變更 /c:10 為要傳回的事件數目,或移動它以傳回符合篩選條件的所有事件。

依事件標識碼查詢事件記錄檔

wevtutil qe system /c:1 /f:text /q:"Event[System[EventID=11]]" | more

依事件標識碼和提供者查詢事件記錄檔

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11]]" | more

過去24小時內依事件標識碼和提供者查詢事件記錄檔

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

使用 604800000 來回顧 7 天,而不是 24 小時。

過去 7 天內依事件標識碼、提供者和 EventData 查詢事件記錄檔

wevtutil qe security /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4624 and TimeCreated[timediff(@SystemTime) <= 604800000]] and EventData[Data[@Name='TargetUserName']='<username>']]" | more

使用 CMD 檢視或移除已安裝的應用程式

列出已安裝的應用程式

wmic product get Name,InstallDate | sort /r | more

sort /r 安裝日期遞減排序,讓您輕鬆查看最近安裝的內容。 使用 <spacebar> 前進到輸出的下一頁,或 <enter> 前進一行。

卸載應用程式

wmic path win32_product where name="<name>" call uninstall

將取代 <name> 為您想要移除之應用程式的上述命令中傳回的名稱。

使用 CMD 的檔案系統管理

取得檔案版本

wmic datafile where "drive='C:' and path='\\windows\\system32\\drivers\\' and filename like 'netvsc%'" get version /format:list

此範例會根據 Windows 版本傳回虛擬 NIC 驅動程式的檔案版本,該驅動程式netvsc.sys、netvsc63.sys或netvsc60.sys。

掃描系統檔案損毀

sfc /scannow

請參閱修復 Windows 映像

掃描系統檔案損毀

dism /online /cleanup-image /scanhealth

請參閱修復 Windows 映像

將檔案許可權匯出至文本檔

icacls %programdata%\Microsoft\Crypto\RSA\MachineKeys /t /c > %temp%\MachineKeys_permissions_before.txt

將檔案許可權儲存至 ACL 檔案

icacls %programdata%\Microsoft\Crypto\RSA\MachineKeys /save %temp%\MachineKeys_permissions_before.aclfile /t

從 ACL 檔案還原檔案許可權

icacls %programdata%\Microsoft\Crypto\RSA /save %temp%\MachineKeys_permissions_before.aclfile /t

使用 /restore 時的路徑必須是您在使用 /save時所指定之資料夾的父資料夾。 在此範例中,\RSA是上述範例中所/save指定資料夾的\MachineKeys父代。

取得資料夾的NTFS擁有權

takeown /f %programdata%\Microsoft\Crypto\RSA\MachineKeys /a /r

以遞歸方式將NTFS許可權授與資料夾

icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"

管理裝置

拿掉不存在的 PNP 裝置

%windir%\System32\RUNDLL32.exe %windir%\System32\pnpclean.dll,RunDLL_PnpClean /Devices /Maxclean

管理群組原則

強制組策略更新

gpupdate /force /wait:-1

使用 CMD 的雜項工作

顯示 OS 版本

ver

wmic os get caption,version,buildnumber /format:list

systeminfo find /i "os name"

systeminfo | findstr /i /r "os.*version.*build"

檢視 OS 安裝日期

systeminfo | find /i "original"

wmic os get installdate

檢視上次開機時間

systeminfo | find /i "system boot time"

檢視時區

systeminfo | find /i "time zone"

wmic timezone get caption,standardname /format:list

重新啟動 Windows

shutdown /r /t 0

新增 /f 會強制執行應用程式關閉,而不會警告使用者。

偵測安全模式開機

bcdedit /enum | find /i "safeboot"

Windows 命令 - PowerShell

若要在 SAC 中執行 PowerShell,請在到達 CMD 提示字元之後輸入:

powershell <enter>

警告

在執行任何其他 PowerShell 命令之前,請先從 PowerShell 工作階段移除 PSReadLine 模組。 如果 PSReadLine 在 SAC 的 PowerShell 工作階段中執行,可能會以剪貼簿貼上的文字導入額外的字元。

首先檢查是否已載入 PSReadLine。 它預設會在 Windows Server 2016、Windows 10 和更新版本的 Windows 上載入。 只有在已手動安裝舊版的 Windows 版本時,才會存在它。

如果此命令傳回沒有輸出的提示,則模組未載入,而且您可以如常在 SAC 中使用 PowerShell 會話。

get-module psreadline

如果上述命令傳回 PSReadLine 模組版本,請執行下列命令來卸除它。 此命令不會刪除或卸載模組,只會從目前的 PowerShell 會話卸除它。

remove-module psreadline

使用 PowerShell 檢視和編輯 Windows 登錄設定

確認 RDP 已啟用

get-itemproperty -path 'hklm:\system\curRentcontrolset\control\terminal server' -name 'fdenytsconNections'

get-itemproperty -path 'hklm:\software\policies\microsoft\windows nt\terminal services' -name 'fdenytsconNections'

只有在設定相關的組策略設定時,才會存在第二個索引鍵 (在 \Policies 下)。

啟用 RDP

set-itemproperty -path 'hklm:\system\curRentcontrolset\control\terminal server' -name 'fdenytsconNections' 0 -type dword

set-itemproperty -path 'hklm:\software\policies\microsoft\windows nt\terminal services' -name 'fdenytsconNections' 0 -type dword

只有在已設定相關的組策略設定時,才需要第二個索引鍵 (在 \Policies 下)。 如果在組策略中設定值,則會在下一次組策略重新整理時重寫此值。

使用 PowerShell 管理 Windows 服務

檢視服務詳細資料

get-wmiobject win32_service -filter "name='termservice'" | format-list Name,DisplayName,State,StartMode,StartName,PathName,ServiceType,Status,ExitCode,ServiceSpecificExitCode,ProcessId

Get-Service 可以使用,但不包含服務登入帳戶。 Get-WmiObject win32-service 會。

設定服務登入帳戶

(get-wmiobject win32_service -filter "name='termservice'").Change($null,$null,$null,$null,$null,$false,'NT Authority\NetworkService')

使用、 NT AUTHORITY\NetworkServiceLocalSystem以外的NT AUTHORITY\LocalService服務帳戶時,請將帳戶密碼指定為帳戶名稱之後的最後一個 (第八個) 自變數。

設定服務啟動類型

set-service termservice -startuptype Manual

Set-service 接受 AutomaticManualDisabled 啟動類型。

設定服務相依性

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\TermService' -Name DependOnService -Value @('RPCSS','TermDD')

啟動服務

start-service termservice

停止服務

stop-service termservice

使用 PowerShell 管理網路功能

顯示 NIC 屬性

get-netadapter | where {$_.ifdesc.startswith('Microsoft Hyper-V Network Adapter')} | format-list status,name,ifdesc,macadDresS,driverversion,MediaConNectState,MediaDuplexState

get-wmiobject win32_networkadapter -filter "servicename='netvsc'" | format-list netenabled,name,macaddress

Get-NetAdapter 適用於 2008R2 的 2012+,請使用 Get-WmiObject

顯示IP屬性

get-wmiobject Win32_NetworkAdapterConfiguration -filter "ServiceName='netvsc'" | format-list DNSHostName,IPAddress,DHCPEnabled,IPSubnet,DefaultIPGateway,MACAddress,DHCPServer,DNSServerSearchOrder

啟用 NIC

get-netadapter | where {$_.ifdesc.startswith('Microsoft Hyper-V Network Adapter')} | enable-netadapter

(get-wmiobject win32_networkadapter -filter "servicename='netvsc'").enable()

Get-NetAdapter 適用於 2008R2 的 2012+,請使用 Get-WmiObject

將 NIC 設定為使用 DHCP

get-netadapter | where {$_.ifdesc.startswith('Microsoft Hyper-V Network Adapter')} | Set-NetIPInterface -DHCP Enabled

(get-wmiobject Win32_NetworkAdapterConfiguration -filter "ServiceName='netvsc'").EnableDHCP()

Get-NetAdapter 於 2012+ 提供。 針對 2008R2,請使用 Get-WmiObject。 Azure VM 應該一律在客體 OS 中設定為使用 DHCP 來取得 IP 位址。 Azure 靜態 IP 設定仍會使用 DHCP 將 IP 提供給 VM。

Ping

test-netconnection

注意

Write-Progress Cmdlet 可能無法使用此命令。 作為緩和措施,您可以在PowerShell中執行 $ProgressPreference = "SilentlyContinue" ,以停用進度列。

get-wmiobject Win32_PingStatus -Filter 'Address="8.8.8.8"' | format-table -autosize IPV4Address,ReplySize,ResponseTime

Test-Netconnection 沒有任何參數會嘗試 ping internetbeacon.msedge.net。 它可在 2012+ 上取得。 針對 2008R2,請使用 Get-WmiObject 作為第二個範例。

埠 Ping

test-netconnection -ComputerName bing.com -Port 80

(new-object Net.Sockets.TcpClient).BeginConnect('bing.com','80',$null,$null).AsyncWaitHandle.WaitOne(300)

Test-NetConnection 於 2012+ 提供。 針對 2008R2 使用 Net.Sockets.TcpClient

測試 DNS 名稱解析

resolve-dnsname bing.com

[System.Net.Dns]::GetHostAddresses('bing.com')

Resolve-DnsName 於 2012+ 提供。 針對 2008R2,請使用 System.Net.DNS

依名稱顯示 Windows 防火牆規則

get-netfirewallrule -name RemoteDesktop-UserMode-In-TCP

依埠顯示 Windows 防火牆規則

get-netfirewallportfilter | where {$_.localport -eq 3389} | foreach {Get-NetFirewallRule -Name $_.InstanceId} | format-list Name,Enabled,Profile,Direction,Action

(new-object -ComObject hnetcfg.fwpolicy2).rules | where {$_.localports -eq 3389 -and $_.direction -eq 1} | format-table Name,Enabled

Get-NetFirewallPortFilter 於 2012+ 提供。 針對 2008R2, hnetcfg.fwpolicy2 請使用 COM 物件。

停用 Windows 防火牆

Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

Set-NetFirewallProfile 於 2012+ 提供。 若為 2008R2,請使用 netsh advfirewall 上述 CMD 區段中所參考的 。

使用 PowerShell 管理使用者和群組

建立本機用戶帳戶

new-localuser <name>

確認用戶帳戶已啟用

(get-localuser | where {$_.SID -like "S-1-5-21-*-500"}).Enabled

(get-wmiobject Win32_UserAccount -Namespace "root\cimv2" -Filter "SID like 'S-1-5-%-500'").Disabled

Get-LocalUser 於 2012+ 提供。 針對 2008R2,請使用 Get-WmiObject。 此範例顯示內建的本機系統管理員帳戶,此帳戶一律具有 SID S-1-5-21-*-500。 從一般化映像建立的 Azure VM 會將本機系統管理員帳戶重新命名為 VM 布建期間指定的名稱。 因此,通常不是 Administrator

將本機使用者新增至本地組

add-localgroupmember -group Administrators -member <username>

啟用本機用戶帳戶

get-localuser | where {$_.SID -like "S-1-5-21-*-500"} | enable-localuser

此範例會啟用內建的本機系統管理員帳戶,此帳戶一律具有 SID S-1-5-21-*-500。 從一般化映像建立的 Azure VM 會將本機系統管理員帳戶重新命名為 VM 布建期間指定的名稱。 因此,通常不是 Administrator

檢視用戶帳戶屬性

get-localuser | where {$_.SID -like "S-1-5-21-*-500"} | format-list *

get-wmiobject Win32_UserAccount -Namespace "root\cimv2" -Filter "SID like 'S-1-5-%-500'" | format-list Name,Disabled,Status,Lockout,Description,SID

Get-LocalUser 於 2012+ 提供。 針對 2008R2,請使用 Get-WmiObject。 此範例顯示內建的本機系統管理員帳戶,此帳戶一律具有 SID S-1-5-21-*-500

檢視本地組

(get-localgroup).name | sort (get-wmiobject win32_group).Name | sort

Get-LocalUser 於 2012+ 提供。 針對 2008R2,請使用 Get-WmiObject

使用PowerShell管理 Windows 事件記錄檔

查詢事件記錄檔錯誤

get-winevent -logname system -maxevents 1 -filterxpath "*[System[Level=2]]" | more

變更 /c:10 為要傳回的事件數目,或移動它以傳回符合篩選條件的所有事件。

依事件標識碼查詢事件記錄檔

get-winevent -logname system -maxevents 1 -filterxpath "*[System[EventID=11]]" | more

依事件標識碼和提供者查詢事件記錄檔

get-winevent -logname system -maxevents 1 -filterxpath "*[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11]]" | more

過去24小時內依事件標識碼和提供者查詢事件記錄檔

get-winevent -logname system -maxevents 1 -filterxpath "*[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

使用 604800000 來回顧 7 天,而不是 24 小時。 |

過去 7 天內依事件標識碼、提供者和 EventData 查詢事件記錄檔

get-winevent -logname system -maxevents 1 -filterxpath "*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4624 and TimeCreated[timediff(@SystemTime) <= 604800000]] and EventData[Data[@Name='TargetUserName']='<username>']]" | more

使用 PowerShell 檢視或移除已安裝的應用程式

列出已安裝的軟體

get-wmiobject win32_product | select installdate,name | sort installdate -descending | more

解除安裝軟體

(get-wmiobject win32_product -filter "Name='<name>'").Uninstall()

使用 PowerShell 的文件系統管理

取得檔案版本

(get-childitem $env:windir\system32\drivers\netvsc*.sys).VersionInfo.FileVersion

此範例會根據 Windows 版本傳回名為 netvsc.sys、netvsc63.sys 或 netvsc60.sys 的虛擬 NIC 驅動程式檔案版本。

下載並擷取檔案

$path='c:\bin';md $path;cd $path;(new-object net.webclient).downloadfile( ('htTp:/'+'/download.sysinternals.com/files/SysinternalsSuite.zip'),"$path\SysinternalsSuite.zip");(new-object -com shelL.apPlication).namespace($path).CopyHere( (new-object -com shelL.apPlication).namespace("$path\SysinternalsSuite.zip").Items(),16)

此範例會 c:\bin 建立資料夾,然後將 Sysinternals 工具套件下載並解壓縮到 c:\bin

使用 PowerShell 進行其他工作

顯示 OS 版本

get-wmiobject win32_operatingsystem | format-list caption,version,buildnumber

檢視 OS 安裝日期

(get-wmiobject win32_operatingsystem).converttodatetime((get-wmiobject win32_operatingsystem).installdate)

檢視上次開機時間

(get-wmiobject win32_operatingsystem).lastbootuptime

檢視 Windows 執行時間

"{0:dd}:{0:hh}:{0:mm}:{0:ss}.{0:ff}" -f ((get-date)-(get-wmiobject win32_operatingsystem).converttodatetime((get-wmiobject win32_operatingsystem).lastbootuptime))

以傳回執行時間, <days>:<hours>:<minutes>:<seconds>:<milliseconds>例如 49:16:48:00.00

重新啟動 Windows

restart-computer

新增 -force 會強制執行應用程式關閉,而不會警告使用者。

實例元數據

您可以從 Azure VM 內查詢 Azure 實例元數據,以檢視 osType、Location、vmSize、vmId、name、resourceGroupName、subscriptionId、privateIpAddress 和 publicIpAddress 等詳細數據。

查詢實例元數據需要狀況良好的客體網路連線,因為它會透過 Azure 主機對實例元數據服務進行 REST 呼叫。 因此,如果您能夠查詢實例元數據,告知來賓能夠透過網路與 Azure 託管服務進行通訊。

如需詳細資訊,請參閱 Azure 實例元數據服務

執行個體中繼資料

$im = invoke-restmethod -headers @{"metadata"="true"} -uri http://169.254.169.254/metadata/instance?api-version=2017-08-01 -method get

$im | convertto-json

OS 型態 (實例元資料)

$im.Compute.osType

位置(實例元資料)

$im.Compute.Location

大小 (實例元資料)

$im.Compute.vmSize

VM 識別碼 (實例元資料)

$im.Compute.vmId

VM 名稱 (實例元資料)

$im.Compute.name

資源群組名稱 (實例元資料)

$im.Compute.resourceGroupName

訂用帳戶識別碼 (實例元資料)

$im.Compute.subscriptionId

標記 (實例元資料)

$im.Compute.tags

放置群組識別碼 (實例元資料)

$im.Compute.placementGroupId

平台容錯網域 (實例元數據)

$im.Compute.platformFaultDomain

平臺更新網域 (實例元資料)

$im.Compute.platformUpdateDomain

IPv4 私人 IP 位址(實例元數據)

$im.network.interface.ipv4.ipAddress.privateIpAddress

IPv4 公用 IP 位址 (實例元資料)

$im.network.interface.ipv4.ipAddress.publicIpAddress

IPv4 子網位址/前置詞(實例元數據)

$im.network.interface.ipv4.subnet.address

$im.network.interface.ipv4.subnet.prefix

IPv6 IP 位址 (實例元數據)

$im.network.interface.ipv6.ipAddress

MAC 位址 (實例元資料)

$im.network.interface.macAddress

下一步

  • 主要序列主控台 Windows 檔頁面位於 這裡
  • 序列主控台也適用於 Linux VM。
  • 深入瞭解 開機診斷

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。