适用于: ✔️ Windows VM
本文提供了一些示例命令,用于在必须使用特殊管理控制台(SAC)访问 Windows 虚拟机(VM)的情况下执行常见任务。 例如,可能需要使用 SAC 排查 RDP 连接故障。
自 Windows Server 2003 以来,SAC 包含在 Windows 的所有版本中。 但是,默认情况下,它处于禁用状态。 SAC 依赖于 sacdrv.sys 内核驱动程序、 Special Administration Console Helper 服务(sacsvr)和 sacsess.exe 进程。 有关详细信息,请参阅 紧急管理服务工具和设置。
使用 SAC,可以通过串行端口连接到正在运行的 OS。 在 SAC 中打开命令提示符窗口时,sacsess.exe 会在您正在运行的操作系统中启动 cmd.exe。 在任务管理器中,你可以看到,如果同时通过 RDP 连接到你的虚拟机,那么你现在通过串行控制台功能连接到 SAC。 通过 SAC 访问的 CMD 窗口与 cmd.exe 通过 RDP 连接时使用的窗口相同。 所有相同的命令和工具都可用,包括从该 CMD 实例启动 PowerShell 的功能。 SAC 与 Windows 恢复环境(WinRE)之间的主要区别在于,SAC 允许你管理正在运行的 OS,但 WinRE 会启动到不同的最小作系统。 尽管 Azure VM 不支持访问 WinRE 的功能,但它们可以通过 SAC 进行管理。
由于 SAC 限制为 80x24 像素屏幕缓冲区,没有回退功能,因此请添加到 | more 命令,以便一次显示一页的输出。 用于 <spacebar> 查看下一页,或 <enter> 查看下一行。
串行控制台窗口的粘贴快捷方式为 SHIFT+INSERT。
由于 SAC 的屏幕缓冲区有限,通过将命令从本地文本编辑器复制到 SAC,可以更轻松地管理更长的命令。
将 CMD 用于 Windows 注册表设置
若要使用 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 服务
若要使用 CMD 管理 Windows 服务,请执行以下步骤:
查看服务状态:
sc query termservice查看服务登录帐户:
sc qc termservice设置服务登录帐户:
sc config termservice obj= "NT Authority\NetworkService"注意: 等号后需要空格。
设置服务启动类型:
sc config termservice start= demand注意: 等号后需要空格。 可能的起始值包括:
boot、、system、autodemand、和disableddelayed-auto。设置服务依赖项:
sc config termservice depend= RPCSS注意: 等号后需要空格。
通过运行以下命令之一启动服务:
net start termservicesc start termservice通过运行以下命令之一来停止服务:
net stop termservicesc stop termservice
使用 CMD 管理网络功能
若要使用 CMD 管理网络功能,请执行以下步骤:
显示 netsh 网络属性:
netsh interface show interface显示 IP 属性:
netsh interface ip show config显示 IPSec 配置:
netsh nap client show configuration启用网络命令行接口:
netsh interface set interface name="<interface name>" admin=enabled将 netsh 接口设置为使用 DHCP:
netsh interface ip set address name="<interface name>" source=dhcp
有关详细信息netsh,请参阅 Network shell (netsh)。
应始终在来宾 OS 中配置 Azure VM,以使用 DHCP 获取 IP 地址。 Azure 静态 IP 设置仍使用 DHCP 向 VM 提供静态 IP。
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 要返回的事件数,或移动它以返回与筛选器匹配的所有事件。
按事件 ID 查询事件日志
wevtutil qe system /c:1 /f:text /q:"Event[System[EventID=11]]" | more
按事件 ID 和提供程序查询事件日志
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11]]" | more
按事件 ID 和提供程序查询过去 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 来回顾七天,而不是 24 小时。
在过去七天内按事件 ID、提供程序和事件数据查询事件日志
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
此示例返回虚拟网络适配器驱动程序的文件版本,该驱动程序 netvsc.sys、netvsc63.sys或 netvsc60.sys,具体取决于 Windows 版本。
扫描系统文件损坏
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父文件夹。 例如,如果以前保存了\MachineKeys的权限,请使用\RSA。
获取文件夹的 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 模块。 在 SAC 的 PowerShell 会话中运行 PSReadLine 时,有一个已知问题会导致粘贴自剪贴板的文本可能引入多余字符。
首先检查 PSReadLine 是否已加载。 它默认在 Windows Server 2016、Windows 10 和更高版本的 Windows 上加载。 仅当 Windows 早期版本手动安装时,它才会存在。
如果此命令返回没有输出的提示,则模块未加载,你可以像平常一样继续使用 SAC 中的 PowerShell 会话。
get-module psreadline
如果上一个命令返回 PSReadLine 模块版本,请运行以下命令以卸载它。 此命令不会删除或卸载模块。 它仅从当前 PowerShell 会话中卸载它。
remove-module psreadline
如果加载 PSReadLine,则粘贴文本时可能会引入额外的字符。 若要避免这种情况,请使用 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\LocalServiceNT AUTHORITY\NetworkService服务帐户时,或者LocalSystem将帐户密码指定为帐户名称后面的最后一个(第八个)参数。
设置服务启动类型
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 管理网络功能
显示网络适配器属性
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适用于 2012 及更高版本,对于 2008 R2,请使用Get-WmiObject。
显示 IP 属性
get-wmiobject Win32_NetworkAdapterConfiguration -filter "ServiceName='netvsc'" | format-list DNSHostName,IPAddress,DHCPEnabled,IPSubnet,DefaultIPGateway,MACAddress,DHCPServer,DNSServerSearchOrder
启用网络适配器
get-netadapter | where {$_.ifdesc.startswith('Microsoft Hyper-V Network Adapter')} | enable-netadapter
或
(get-wmiobject win32_networkadapter -filter "servicename='netvsc'").enable()
Get-NetAdapter适用于 2012 及更高版本,而对于 2008 R2,请使用Get-WmiObject。
将网络适配器设置为使用 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 及更高版本中提供。 对于 2008 R2,请使用 Get-WmiObject。 应始终在来宾 OS 中配置 Azure VM,以使用 DHCP 获取 IP 地址。 Azure 静态 IP 设置仍使用 DHCP 向 VM 提供 IP。
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 及更高版本中可用。 对于 2008 R2,请按照第二个示例使用 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 及更高版本中提供。 对于 2008 R2,请使用 Net.Sockets.TcpClient。
测试 DNS 名称解析
resolve-dnsname bing.com
或
[System.Net.Dns]::GetHostAddresses('bing.com')
Resolve-DnsName 在 2012 及更高版本中提供。 对于 2008 R2,请使用 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 及更高版本中提供。 对于 2008 R2,请使用 hnetcfg.fwpolicy2 COM 对象。
禁用 Windows 防火墙
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Set-NetFirewallProfile 在 2012 及更高版本中提供。 对于 2008 R2,请使用 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 及更高版本中提供。 对于 2008 R2,请使用 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 及更高版本中提供。 对于 2008 R2,请使用 Get-WmiObject。 此示例显示了内置的本地管理员帐户。 此帐户始终具有 SID S-1-5-21-*-500。
查看本地组
(get-localgroup).name | sort
(get-wmiobject win32_group).Name | sort
Get-LocalUser 在 2012 及更高版本中提供。 对于 2008 R2,请使用 Get-WmiObject。
使用 PowerShell 管理 Windows 事件日志
查询事件日志错误
get-winevent -logname system -maxevents 1 -filterxpath "*[System[Level=2]]" | more
将 /c:10 更改为要返回的事件数量,或删除它以返回所有匹配的事件。
按事件 ID 查询事件日志
get-winevent -logname system -maxevents 1 -filterxpath "*[System[EventID=11]]" | more
按事件 ID 和提供程序查询事件日志
get-winevent -logname system -maxevents 1 -filterxpath "*[System[Provider[@Name='Microsoft-Windows-Hyper-V-Netvsc'] and EventID=11]]" | more
按事件 ID 和提供程序查询过去 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 来回顾七天,而不是 24 小时。 |
在过去七天内按事件 ID、提供程序和事件数据查询事件日志
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 查看或删除 iInstalled 应用程序
列出已安装的软件
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
此示例返回虚拟 NIC 驱动程序的文件版本,该驱动程序名为 netvsc.sys、netvsc63.sys或 netvsc60.sys,具体取决于 Windows 版本。
下载并提取文件
$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 ID (实例元数据)
$im.Compute.vmId
VM 名称(实例元数据)
$im.Compute.name
资源组名称(实例元数据)
$im.Compute.resourceGroupName
订阅 ID (实例元数据)
$im.Compute.subscriptionId
标记(实例元数据)
$im.Compute.tags
放置组 ID (实例元数据)
$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 社区支持。 还可以将产品反馈提交到 Azure 反馈社区。