远程管理时如何在命令行中指定密码,而不是弹出一个对话框再输入密码


PowerShell交流中心分类: 远程管理远程管理时如何在命令行中指定密码,而不是弹出一个对话框再输入密码
0
niu9 asked 10 年 ago

特别是在脚本中的时候,运行一个脚本,还得输入密码,这太不方便了,多台主机更不用说了,比如远程管理标签类这个脚本:

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
}

1 Answers
3
Best Answer
J answered 10 年 ago
$defaultCredential = New-Object Management.Automation.PSCredential "username", (ConvertTo-SecureString 'password' -AsPlainText -Force)
 
$PSDefaultParameterValues = @{
	"Enter-PSSession:Credential" = $defaultCredential;
	"Invoke-Command:Credential" = $defaultCredential;
}
niu9 replied 10 年 ago

非常感谢!!!大爱!!我也找到了一个替代方法,使用cmdkey把地址,用户名,密码加入到管理凭据里,这样也可以

niu9 replied 10 年 ago

你好,再请教你一下,这里只提供了一对用户-密码,对于命令里有参数 -ComputerName server1,server2,server3 指定了多台服务器,帐号密码该怎么提供呢?

niu9 replied 10 年 ago

PSCredential里没有发现有填写主机名的属性

Mooser Lee 管理员 replied 10 年 ago

PSCredential支持的是一个独立的用户凭据,如果你想用这样的语法 -ComputerName server1,server2,server3 去多台机器上批量执行一些命令,那么你的用户凭据必须一致。而且这种场景主要适用于域环境下。如果你的每台机器的用户名和密码都不相同,你可以把用户凭据保存在一个HashTable,然后-Credential $hashTable[$computer],去调用。

niu9 replied 10 年 ago

嗯,谢谢了。但是这样的话就是串行操作了,而不是并行操作(powershell有个扇出特性撒)。我管理的是游戏服务器,位于不同机房,经常要一台台登录上去更新游戏版本,为了安全用户密码不会弄成统一的。

Mooser Lee 管理员 replied 10 年 ago

串行,也可以使用特殊的命令把它变成并行,http://www.pstips.net/running-background-jobs-efficiently.html或者使用Start-Job等命令。

niu9 replied 10 年 ago

谢谢,又学到新东西了