我正在尝试创建一个PowerShell脚本,它将启动/停止远程计算机上的服务,但会提示用户输入所有值。我知道将使用的帐户;我只需要提示用户输入密码。
这适用于Tomcat个实例。问题是Tomcat服务在不同服务器(tomcat6,tomcat7)上的命名并不总是相同。我需要能够存储加密的密码并提示停止或启动。这是我到目前为止所拥有的。有什么想法吗?
我不确定我是否在正确的位置-AsSecureString
。
# Prompt for user credentials
$credential=get-credential -AsSecureString -credential Domain\username
# Prompt for server name
$server = READ-HOST "Enter Server Name"
# Prompt for service name
$Service = READ-HOST "Enter Service Name"
gwmi win32_service -computername $server -filter "name='$service'" -Credential'
$cred.stop-service
答案 0 :(得分:2)
这应该让你开始,它使用可选参数作为凭据和服务名称,如果省略凭据,它将提示它们。如果省略服务名称,它将默认为tomcat *,它应返回与该过滤器匹配的所有服务。然后将搜索结果传送到停止或根据需要启动。
由于computername接受管道输入,你可以传入一组计算机,或者如果它们存在于文件中,则将该文件的内容传入脚本。
e.g。
Get-Content computers.txt | <scriptname.ps1> -Control Stop
希望有帮助...
[cmdletBinding(SupportsShouldProcess=$true,ConfirmImpact="High")]
param
(
[parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[string]$ComputerName,
[parameter(Mandatory=$false)]
[string]$ServiceName = "tomcat*",
[parameter(Mandatory=$false)]
[System.Management.Automation.PSCredential]$Credential,
[parameter(Mandatory=$false)]
[ValidateSet("Start", "Stop")]
[string]$Control = "Start"
)
begin
{
if (!($Credential))
{
#prompt for user credential
$Credential = get-credential -credential Domain\username
}
}
process
{
$scriptblock = {
param ( $ServiceName, $Control )
$Services = Get-Service -Name $ServiceName
if ($Services)
{
switch ($Control) {
"Start" { $Services | Start-Service }
"Stop" { $Services | Stop-Service }
}
}
else
{
write-error "No service found!"
}
}
Invoke-Command -ComputerName $computerName -Credential $credential -ScriptBlock $scriptBlock -ArgumentList $ServiceName, $Control
}