2014-01-24 6 views
7

Ich habe ein Array von Credential Objekte und ich möchte testen, dass diese Anmeldeinformationen Berechtigungen zum Schreiben einer Datei in eine Dateifreigabe haben.Wie testet man das Schreiben in einen Dateifreigabepfad mit Anmeldeinformationen?

ich so etwas wie

$myPath = "\\path\to\my\share\test.txt" 
foreach ($cred in $credentialList) 
{ 
    "Testing" | Out-File -FilePath $myPath -Credential $cred 
} 

tun würde, aber dann entdeckte ich, dass Out-File nicht Credential als Parameter übernimmt. Was ist der beste Weg, dies zu lösen?

Antwort

4

Schreiben zu testen, verwenden Sie können New-PSDrive verwenden:

$myPath = "\\path\to\my\share" 

foreach ($cred in $credentialList) 
{ 
    New-PSDrive Test -PSProvider FileSystem -Root $myPath -Credential $Cred 
    "Testing" | Out-File -FilePath Test:\test.txt 
    Remove-PSDrive Test 
} 
+1

Ich bekomme das. 'Der Anbieter unterstützt die Verwendung von Anmeldeinformationen nicht. Führen Sie die Operation erneut aus, ohne die Anmeldeinformationen anzugeben. " –

+0

Entschuldigung. Scheint versionsspezifisch zu sein. Es funktioniert in V4, aber nicht V2/3 – mjolinor

+0

Ich werde jetzt PowerShell 4 verwenden, so dass dies für mich funktioniert –

3

Versuchen Sie, die Invoke-Command Funktion zu verwenden. Es benötigt ein Berechtigungsobjekt und ermöglicht Ihnen, einen beliebigen Skriptblock unter diesem Befehl auszuführen. Sie können, dass die Datei

Invoke-Command -ScriptBlock { "Testing" | Out-File $myPath } -Credential $cred 
+0

Ich bekomme 'Invoke-Command: Parametersatz kann nicht mit den angegebenen benannten Parametern aufgelöst werden. –

5

Hier ist eine Situation, wo eine alte exe (net.exe) als Powershell besser zu machen scheint. .. ich denke, man könnte versuchen, ein Netzlaufwerk mit dem Berechtigungsnachweis dann testen bereitgestellt abzubilden, eine Datei zu dem Laufwerk zu schreiben:

$cred=get-credential 
$pass=$cred.GetNetworkCredential().Password 
net use q: \\servername\share $pass /user:$cred.username 
4

Verwenden Sie dieses Skript von Microsofts TechNet Script Cent genommen er: http://gallery.technet.microsoft.com/scriptcenter/Lists-all-the-shared-5ebb395a

Es ist viel einfacher zu ändern, um Ihre Bedürfnisse dann vollständig von Grund auf neu zu beginnen. Öffnen Sie ListSharedFolderPermissions.ps1, und finden Sie die drei $Properties Vars. eine Linie am oberen Rand jeder hinzufügen, damit Sie an, welcher Benutzer Sie suchen sagen kann, so ist es nun wie folgt aussehen:

$Properties = @{'Username' = $Credential.UserName 
       'ComputerName' = $ComputerName 
        . . . . .     } 

Als nächstes Ihrem neuen Benutzernamen Eigenschaft auf die select-Objektzeile (3-mal hinzufügen):

$Objs|Select-Object Username,ComputerName,ConnectionStatus,SharedFolderName,SecurityPrincipal, ` 
     FileSystemRights,AccessControlType 

Sobald Sie diese kleinen Stücke in den sechs entsprechenden Stellen Sie Ihr Skript ist gebrauchsfertig hinzugefügt:

cd c:\Path\where\you\put\ps1\file 
$permissions = @() 
$myPath = "computername" 
foreach ($cred in $credentialList) 
{ 
    $permissions += .\ListAllSharedFolderPermission.ps1 -ComputerName $myPath -Credential $cred 
    $permissions += " " 
} 
$permissions | Export-Csv -Path "C:\Permission.csv" -NoTypeInformation 
3

ich denke, die Invoke-command Ansatz funktionieren sollte. Aber wenn nichts funktioniert, können Sie versuchen, die powershell impersonation module. Es nimmt erfolgreich einen Benutzer für die meisten Powershell-Befehle ohne den -Credential-Schalter an.

3

Einige Ideen:

  • Erstellen Sie Ihre eigenen PowerShell Provider
  • eine Benutzeridentität und dann auf die Freigabe (nicht sicher, wenn möglich in Powershell)
  • Verwenden net use d:... als @Kayasax hat vorgeschlagen,
  • schreiben Verwenden Sie WScript.Network

Ich bin sehr intere Ich habe mich entschieden, etwas wirklich schnell zu machen, also ging ich mit der Verwendung der WScript.Network-Bibliothek. Ich habe eine Hash-Tabelle verwendet, um zu verfolgen, ob ein Benutzer "authentifiziert" werden würde oder nicht.

Verwandte Themen