2016-02-27 224 views
1

我目前有一個讀取服務器列表的VBScript,並嘗試驗證特定用戶標識的密碼。用戶標識在本地服務器上。我正在檢查密碼未設置爲默認值(我想確保它已更改爲其他內容)。如何登錄到遠程服務器?

「服務器列表」可以是IP地址,主機名(如Rocky)或完全限定的DNS名稱(如rocky.bigcompany.com)的混合。這些服務器是物理設備和虛擬設備的混合體,可能也可能不在域中。

我寫的現有VBScript處理所有這些,並且正常工作。我正在嘗試在Powershell中重新編寫這個相同的程序,但它不工作。

下面是我在VBScript中的函數做什麼,我想:

Function LoginToServer(Computer, username, password) 
    'this function will log into a server 

    On Error Resume next 

    Set locator = CreateObject("WbemScripting.SWbemLocator") 
    Set wmi = locator.ConnectServer(computer, "root\cimv2", username, password) 

    'check the error code and see if we logged in successfully 
    LoginRC = Err.Number 

    If LoginRC <> 0 Then 
     msg = "Could not log into server: " & CStr(computer) & " With ID: " & CStr(username) 
     lfo.lmsg "B", "WARN", msg 
    Else 
     msg = "Server: " & CStr(computer) & " Logged in successfully as: " & CStr(username) 
     lfo.lmsg "B", "INFO", msg 
    End If 

    wmi.Security_.ImpersonationLevel = 3 

    'return the code back to calleer 
    LoginToServer = LoginRC 
End Function 

&hellip;這裏就是我試圖在PowerShell中要做到:

Param($ComputerName = "LocalHost") 

$ErrorActionPreference = "Stop" 

# Actual Code starts here 
Write-Host "Attempting to ping server: $ComputerName" 
$IPResult = Test-Connection -ComputerName $ComputerName -Quiet 

if ($IPResult -eq "TRUE") { 
    Write-Host "Ping OK - now attempting to log in" 

    try { 
     $ID = "userid" 
     $PSW = "password" 

     $password = ConvertTo-SecureString $PSW -AsPlainText -Force 
     $cred = New-Object System.Management.Automation.PSCredential ($ID, $password) 
     $sesh = New-PSSession -ComputerName $ComputerName -Credential $cred 
    } catch { 
     Write-Host "Error caught" 
     $ErrorMessage = $_.Exception.Message 
     $FailedItem = $_.Exception.ItemName 
    } finally { 
     $Time = Get-Date 
     "$Time Computer: $ComputerName ERROR: $ErrorMessage ITEM: $FailedItem" | 
      Out-File c:\temp\TestCredScript.log -Append 
    } 
} else { 
    Write-Host "Could not ping server" 
} 

如何登錄到使用PowerShell中的ID和密碼,這些遠程計算機?

+1

你能比「不工作」更具體嗎? :) –

+0

對不起馬蒂亞斯 - 我很熱心地把所有的信息都寫進了這篇文章,我昨天晚上意識到我沒有給出任何有關不工作的細節。當我嘗試使用代碼登錄一個不在域中的服務器,我收到一個錯誤,說我使用了無效的ID或密碼。我知道ID和密碼是有效的。我在運行代碼後立即登錄到服務器,以驗證我是否擁有正確的信息。 – GeoCoder

回答

2

你的兩個代碼示例做了不同的事情。 VBScript代碼通過WMI連接,而PowerShell代碼嘗試建立PowerShell會話。對於後者,您需要啓用PowerShell Remoting,這可能不具備。

儘管您可能想要啓用PSRemoting,但您也可以使用PowerShell中的WMI。 Get-WmiObject cmdlet允許您提供證書和模擬級別,因此您不需要首先建立與您需要使用VBScript(如果要使用顯式證書)相關的連接。

例查詢遠程計算機上的Win32_Process類:

$computer = '...' 
$username = 'userid' 
$password = 'password' 

$pw = ConvertTo-SecureString $password -AsPlainText -Force 
$cred = New-Object Management.Automation.PSCredential ($username, $pw) 

Get-WmiObject -Computer $computer -Namespace 'root\cimv2' -Class Win32_Process -Impersonation 3 -Credential $cred 

進一步的信息參見here

+0

謝謝!你讓我避免過早禿頂!我最初試圖做這樣的事情,但不能讓它工作。我必須看看我保存的一些代碼,但我想我試圖將密碼硬編碼到PSCredential中,而不是先使用Convert-To-SecureString。我放棄了並嘗試了其他方法,其他方法我最終都感到沮喪併發布了您看到的代碼。我已經使用您提供的信息修改了我的腳本,現在它工作的很好!感謝您幫助新手Powershell腳本! – GeoCoder

+0

感謝您提醒我接受答案。我是新來張貼在這個論壇上,並仍然認爲這樣的事情。 – GeoCoder

相關問題