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
、、system
、auto
demand
、disabled
、 delayed-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
掃描系統檔案損毀
dism /online /cleanup-image /scanhealth
將檔案許可權匯出至文本檔
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\NetworkService
或 LocalSystem
以外的NT AUTHORITY\LocalService
服務帳戶時,請將帳戶密碼指定為帳戶名稱之後的最後一個 (第八個) 自變數。
設定服務啟動類型
set-service termservice -startuptype Manual
Set-service
接受 Automatic
、 Manual
或 Disabled
啟動類型。
設定服務相依性
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
下一步
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。