特别是在脚本中的时候,运行一个脚本,还得输入密码,这太不方便了,多台主机更不用说了,比如远程管理标签类这个脚本:
Function
Stop-RemoteProcess
{
[
CmdletBinding
()]
param
(
[string]
$computername
=
$env:COMPUTERNAME
,
[string]
$processname
)
Get-CimInstance
-ClassName
Win32_Process
-ComputerName
$computername
-Filter
"Name = '$processname'"
|
Invoke-CimMethod
-MethodName
Terminate
}
$defaultCredential = New-Object Management.Automation.PSCredential "username", (ConvertTo-SecureString 'password' -AsPlainText -Force) $PSDefaultParameterValues = @{ "Enter-PSSession:Credential" = $defaultCredential; "Invoke-Command:Credential" = $defaultCredential; }
非常感谢!!!大爱!!我也找到了一个替代方法,使用cmdkey把地址,用户名,密码加入到管理凭据里,这样也可以
你好,再请教你一下,这里只提供了一对用户-密码,对于命令里有参数 -ComputerName server1,server2,server3 指定了多台服务器,帐号密码该怎么提供呢?
PSCredential里没有发现有填写主机名的属性
PSCredential支持的是一个独立的用户凭据,如果你想用这样的语法 -ComputerName server1,server2,server3 去多台机器上批量执行一些命令,那么你的用户凭据必须一致。而且这种场景主要适用于域环境下。如果你的每台机器的用户名和密码都不相同,你可以把用户凭据保存在一个HashTable,然后-Credential $hashTable[$computer],去调用。
嗯,谢谢了。但是这样的话就是串行操作了,而不是并行操作(powershell有个扇出特性撒)。我管理的是游戏服务器,位于不同机房,经常要一台台登录上去更新游戏版本,为了安全用户密码不会弄成统一的。
串行,也可以使用特殊的命令把它变成并行,http://www.pstips.net/running-background-jobs-efficiently.html或者使用Start-Job等命令。
谢谢,又学到新东西了