Powershell多个凭证设置

时间:2016-08-15 10:34:48

标签: windows powershell credentials

我只是设置 powershell 来收集一组服务器之间的磁盘空间信息。 但我遇到一个问题,当我尝试从一台服务器到另一台服务器进行身份验证时,它需要不同的凭据信息。

E.g。 SQLServer01

  

ID:domain1 \ sqladmin1

     

PW:123456

SQLServer02

  

ID:domain2 \ sqladmin2

     

PW:654321

现在我设法设置第一个具有有限电源外壳体验的。

$comp= Get-Content "C:\disk_info\Computers.txt"
$diskvalue = @()
#$cre = get-Credential

$username = "domain1\sqladmin1"
$password = "123456"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force 
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $secureStringPwd



foreach($pc in $comp)
{
    $diskvalue += Get-WmiObject -Class Win32_logicaldisk -ComputerName $pc -credential $creds -Filter DriveType=3 | 
    Select SystemName , DeviceID , @{Name=”size(GB)”;Expression={“{0:N1}” -f($_.size/1gb)}}, @{Name=”freespace(GB)”;Expression={“{0:N1}” -f($_.freespace/1gb)}}, @{Name=”UsedSpace(GB)”;Expression={“{0:N2}” -f(($_.size - $_.FreeSpace)/1gb)}}
    #$diskvalue -replace ":",""
    $diskvalue | Export-Csv C:\disk_info\DiskReport.csv -NoTypeInformation

}

但我正在尝试仅为某些服务器输入另一个凭据。在这种情况下domain2\

Computer.txt作为参考

sqlserver1.domain1.com 
sqlserver2.domain1.domain2.com 
sqlserver3.domain1.com

包括" domain2"需要多个凭证。

2 个答案:

答案 0 :(得分:1)

如果您在Computers.txt中使用了计算机的完全限定域名,则可以使用简单的if语句来决定使用哪个域凭据。您只需要在下面的脚本($domain2Match)中将顶部的$domain2Match='.domain1.domain2.com'变量更改为第二个域。

$comp= Get-Content "C:\disk_info\Computers.txt"
$diskvalue = @()

# Put your FQDN without the server name here for the seconded domain
$domain2Match = '.domain1.domain2.com' 

# Credential 1
$username = "domain1\sqladmin1"
$password = "123456"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force 
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $secureStringPwd

# Credential 2   
$username2 = "domain2\sqladmin2"
$password2 = "123456"
$secureStringPwd2 = $password2 | ConvertTo-SecureString -AsPlainText -Force 
$creds2 = New-Object System.Management.Automation.PSCredential -ArgumentList $user2, $secureStringPwd2


foreach($pc in $comp)
{
    $credsToUse = $null

    If($pc -imatch $domain2Match){
        # Matched use domain 2 Credential
        $credsToUse = $creds2 
    }Else {
        # No match use domain 1 Credential
        $credsToUse = $creds
    }

    $diskvalue += Get-WmiObject -Class Win32_logicaldisk -ComputerName $pc -credential $credsToUse -Filter DriveType=3 | 
    Select SystemName , DeviceID , @{Name=”size(GB)”;Expression={“{0:N1}” -f($_.size/1gb)}}, @{Name=”freespace(GB)”;Expression={“{0:N1}” -f($_.freespace/1gb)}}, @{Name=”UsedSpace(GB)”;Expression={“{0:N2}” -f(($_.size - $_.FreeSpace)/1gb)}}
    $diskvalue | Export-Csv C:\disk_info\DiskReport.csv -NoTypeInformation
}

答案 1 :(得分:0)

您可以创建两个Credenital对象:

Cred 1

$username = "domain1\sqladmin1"
$password = "123456"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force 
$creds = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $secureStringPwd

Cred 2

$username = "domain2\sqladmin2"
$password = "123456"
$secureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force 
$creds2 = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $secureStringPwd

然后使用IF语句和splatting Params(将更容易和更清洁)

foreach($pc in $comp)
{

$Params = @{
Class = "Win32_logicaldisk"
ComputerName = $pc
Credential = $creds
Filter = 'DriveType=3' 
}

If ($pc -eq "SQLServer02")
{
$Params["Credential"] = $creds2
}
    $diskvalue += Get-WmiObject @Params | Select SystemName , DeviceID , @{Name=”size(GB)”;Expression={“{0:N1}” -f($_.size/1gb)}}, @{Name=”freespace(GB)”;Expression={“{0:N1}” -f($_.freespace/1gb)}}, @{Name=”UsedSpace(GB)”;Expression={“{0:N2}” -f(($_.size - $_.FreeSpace)/1gb)}}
    #$diskvalue -replace ":",""
    $diskvalue | Export-Csv C:\disk_info\DiskReport.csv -NoTypeInformation

  }