询问者
对方机器没有在安全策略中选经典 而是GUEST 我怎么才能远程连接注册表

问题
全部回复
-
1.1 测试PowerShell远程管理
如果远程管理被启用了,可以使用下面的cmdlet查看:
PS C:\ > Enter-PSSession –ComputerName localhost
用户将会看到如下图2所示的提示符:
</center>
【提示】
PowerShell线程(PS Session)是运行远程命令和脚本的环境。PowerShell 2.0提供了各式各样的cmdlet管理这些线程。可以使用Get-Command –noun PSSession命令查看所有与PSSession相关的cmdlet。
在所有加入工作组的计算机——包括Windows XP,Windows Vista或更高版本,用户需要使用如下命令增加所有远程客户端的IP地址到受信主机清单中:
PS C:\ > Set-item wsman:localhost\client\trustedhosts –value *
使用*用于将所有主机添加为受信主机,如果需要指定特定的主机可以使用下面的命令:
PS C:\ > Set-item wsman:localhost\client\trustedhosts –value Copmuter1,Computer2
如果需要添加指定域名下的所有主机可执行下面的命令:
PS C:\ > Set-item wsman:localhost\client\trustedhosts –value *.testdomain.com
如果需要添加远程主机的IP地址到受信主机的清单:
PS C:\ > Set-item wsman:localhost\client\trustedhosts –value 10.0.0.1
一旦做了上面的更改,用户能用Enable-PSRemoting cmdlet在这些工作组中的主机。
1.3在混合域环境中使用远程管理
默认情况下,不同域下的用户即使是本地管理员组的成员仍然不能连接到其他域中的主机。这是因为从其他域的远程连接只是运行在独立的用户权限之上。为了能使不同域的主机可以连接到本地计算机,用户可以更改LocalAccountTokenFilterPolicy注册表键值(设置为1)来允许其他域的成员到本地计算机
PS C:\ > new-itemproperty -name LocalAccountTokenFilterPolicy -path ` HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -propertyType DWord -value 1
1.4 在企业环境下启用远程管理
为了能在企业或域环境中的多台主机上启用远程管理,用户需要使用组策略,更多的信息可以从http://technet.microsoft.com/en-us/library/dd347642.aspx地址获取。
1.5禁用远程管理
用户可以使用Disable-PSRemoting在本地主机上禁用远程管理。Disable-PSRemoting将会使线程配置信息失效,这样的操作并不会移除所有Enable-PSRemoting创建的配置,包括WinRM的启用状态和为PS远程管理创建的监听器。
如果在本机上没有任何服务或组件需要WinRM服务,用户可以通过执行下列命令禁用WinRM服务:
Set-Service winrm -StartupType Manual
Stop-Service winrm
为了移除默认情况下WinRM在5985端口设置的监听器可以执行的下述命令:
Get-ChildItem WSMan:\localhost\Listener –Recurse | Foreach-Object { $_.PSPath } | Where-Object { (Get-Item "$_\Port").Value -eq 5985 } | Remove-Item
2 执行远程命令
在远程管理的情况下,有两种方式在远程主机上运行命令或脚本。包括Invoke-Command cmdlet和交互式远程线程。一旦用户在本机启用远程管理,用户就能用Invoke-Command cmdlet在本机或远程主机运行命令和脚本。
2.1 在本地或远程主机运行脚本块
用户能用下面的方式在本地和远程主机调用命令:
Invoke-Command -ComputerName WinServ-wfe -ScriptBlock {Get-Process}
脚本块此参数能用于指定在远程主机运行的一系列命令。如果要在本地执行命令,则ComputerName参数不是必须的。如果用户需要在多个远程主机上执行相同的命令,用户能如下例所示通过逗号分隔的ComputerName参数或使用文本文件将主机清单传递给cmdlet:
Invoke-Command -ComputerName WinServ-wfe, SQL-Server2008 -ScriptBlock {Get-Process}
或
Invoke-Command -ComputerName (get-content c:\scripts\servers.txt) -ScriptBlock {Get-Process}
这种方式也被称之为散开式或一对多远程管理。用户能用一条命令在多台主机上执行相同的命令。
脚本块中所有的命令和变量均会在远程计算机上运行。如果用户采用类似于-ScriptBlock {Get-Process –Name $procName},PowerShell认为远程计算机线程中$procName变量已经定义过了。用户能通过使用Invoke-Command命令,将本地计算机上的变量传递到远程线程。
2.2 传递变量到远程线程
前面的例子中,用户可以传递要寻找的进程名作为变量。ArgumentList参数能帮助用户传递到远程线程中:
$procName = "powershell"
Invoke-Command -ComputerName (get-content c:\scripts\servers.txt) ` -ScriptBlock {param ($Name) Get-Process -Name $Name} –ArgumentList $procName
上面的例子中可以显示如何使用-ArgumentList参数传递本地变量到远程线程。
2.3 通过Invoke-Command使用持久线程
用户可以使用带-ComputerName参数的Invoke-Command建立临时的线程执行远程命令。会在每次使用Invoke-Command cmdlet时,都会重新建立线程。在只是执行简单、为数不多的命令时可能无所谓,但是如果要执行大量命令和脚本时将会非常的耗时费力。为了避免这种情况,就需要使用持久线程,用户能使用New-PSSession cmdlet创建对远程主机的持久连接。
$s = New-PSSession -ComputerName WinServ-wfe
此时,$s包含持久连接的线程细节,可以使用$s在远程主机上调用命令语法如下:
Invoke-Commad -Session $s -ScriptBlock {get-Process}
当在远程组合机上执行命令时,$s会包含所有创建和修改的变量。这样以$s作为线程的后续执行的命令能够访问所有在远程主机上创建和更新的变量,如下例所示:
$s = new-pssession -computername WinServ-wfe
Invoke-Command -Session $s -ScriptBlock {$fileCount = (Get-ChildItem D:\ -Recurse).Count}
invoke-command -session $s -scriptblock {$fileCount}
用户能访问$fileCount变量,因为是使用了持久线程执行命令。如果只是使用-ComputerName调用命令这是不可能实现的。
2.4作为后台任务运行远程命令
前面的例子中获取远程主机上所有D:\下的文件数量,如果包含的文件数量很大的情况下将会很耗时,这样就需要等待远程命令完成执行。为了避免这一点,用户可以使用-AsJob参数使命令作为远程主机的后台任务。命令格式如下所示:
Invoke-Command -ComputerName WinServ-wfe -ScriptBlock {(Get-ChildItem D:\ -Recurse).Count} –asJob
执行后效果如下图4所示:
</center>
当用户使用带-AsJob参数的Invoke-Command cmdlet时,远程主机上的后台任务将会被创建和运行,在后台任务被创建后,可以使用*-job cmdlet管理任务对象。
比如,用户可以使用Get-Job监控任务的状态并且一旦任务状态变为完成,就可以使用Receive-Job cmdlet获取指定脚本块的输出。
Get-Job –id 3 | Receive-Job
用户也能使用Start-Job在远程主机上用脚本块创建后台任务。然而,通过这样方式建立的任务的输出结果只会在远程主机上显示。当用户需要从该后台任务获取输出输出时,就需要在Invoke-Command调用的脚本块中使用Receive-Job cmdlet。
2.5 为远程管理指定凭据
前面的文章里,能够用在工作组中的计算机间使用PowerShell远程管理。在前面的例子中只是假定是使用管理员权限访问远程计算机,这样的方式可以在域中任何以管理员凭据登陆的计算机上在域环境中很好的工作,用户不需要显式的传递凭据给Invoke-Command。然而,这样的方式是无法在工作组环境下使用,需要传递凭据给Invoke-Command,如下例所示:
$cred = Get-Credential
Invoke-Command -ComputerName WinServ-wfe -ScriptBlock { Get-Process} -Credential $cred
在上面的例子中,Get-Credential会向用户索取访问远程主机的凭据,并使用该凭据调用Invoke-Command cmdlet。
MCITP / CCIE / OCP / RHCE
QQ:6927317
Msn: Pcdogyu@hotmail.com
Skype: Popcap.Yuhao