Powershell - NTFS Berechtigungen Konvertierungsfehler bei Invoke-Command
Hallo zusammen,
ich versuche gerade per invoke-command dem Admin Full Access auf einen Ordner zugeben.
Dabei erhalte ich folgende Fehlermeldung:
Der Parameter "Account" kann nicht gebunden werden. Der Wert "System.Management.Automation.PSCredential" vom Typ "System.Management.Automation.PSCredential" kann nicht in den Typ "Security2.IdentityReference2" konvertiert werden.
Da das Script individuell bleiben soll und für jeden Kunden geeignet ist wird alles aus einer Config.xml geladen weshalb ich die Account information NICHT direkt mitgeben kann.
kurz zum Script:
Ich habe ein Script mit GUI gebaut welches, zum einen User die in einer csv mit SamAccountName stehen löscht und zum anderen, deren Redirected Folders und Roaming Profiles vom Server löscht.
Informationen wie Server und Pfade kommen alle aus einer config.xml
Script begin (config laden):
NTFS Berechtigungen ändern
$RDF = Redirected Folders
$RPF = Roaming Profiles:
Hoffe ihr könnt mir folgen. Gerne Fragen wenn Fragen oder ? entstanden sind.
Vielen Dank
Sebastian
ich versuche gerade per invoke-command dem Admin Full Access auf einen Ordner zugeben.
Dabei erhalte ich folgende Fehlermeldung:
Der Parameter "Account" kann nicht gebunden werden. Der Wert "System.Management.Automation.PSCredential" vom Typ "System.Management.Automation.PSCredential" kann nicht in den Typ "Security2.IdentityReference2" konvertiert werden.
Da das Script individuell bleiben soll und für jeden Kunden geeignet ist wird alles aus einer Config.xml geladen weshalb ich die Account information NICHT direkt mitgeben kann.
kurz zum Script:
Ich habe ein Script mit GUI gebaut welches, zum einen User die in einer csv mit SamAccountName stehen löscht und zum anderen, deren Redirected Folders und Roaming Profiles vom Server löscht.
Informationen wie Server und Pfade kommen alle aus einer config.xml
Script begin (config laden):
################################
# - FUNCTION Choose config - #
################################
function Read-OpenFileDialog([string]$WindowTitle, [string]$InitialDirectory, [string]$Filter = "All files (*.*)|*.*", [switch]$AllowMultiSelect)
{
$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.Title = $WindowTitle
if (![string]::IsNullOrWhiteSpace($InitialDirectory)) { $openFileDialog.InitialDirectory = $InitialDirectory }
$openFileDialog.Filter = $Filter
if ($AllowMultiSelect) { $openFileDialog.MultiSelect = $true }
$openFileDialog.ShowHelp = $true # Without this line the ShowDialog() function may hang depending on system configuration and running from console vs. ISE.
$openFileDialog.ShowDialog() > $null
if ($AllowMultiSelect) { return $openFileDialog.Filenames } else { return $openFileDialog.Filename }
}
####################################
# - END FUNCTION Choose config - #
####################################
$xml = Read-OpenFileDialog -WindowTitle "Select Config File" -InitialDirectory 'C:\' -Filter "XML Files (*.xml)|*.xml"
[xml]$ConfigFile = Get-Content $xml
$cred = Get-Credential
####################################
# - Admin User for Folder Rights - #
####################################
$AdminUser = @{
Account = $ConfigFile.Settings.User.Admin
}
########################################
# - END Admin User for Folder Rights - #
########################################
NTFS Berechtigungen ändern
$RDF = Redirected Folders
$RPF = Roaming Profiles:
####################################
# - FUNCTION Delete User Profile - #
####################################
function delUserProfile
{
Begin
{
Log-Write -LogPath $LogFile -LineValue "###################################"
Log-Write -LogPath $LogFile -LineValue "# Deleting User Roaming Profiles: #"
Log-Write -LogPath $LogFile -LineValue "###################################"
}
Process
{
Try
{
IMPORT-CSV $DropDownDelUserProfile.SelectedItem.FullName |
ForEach-Object{
$outputbox.Text +="`r`n"
$outputBox.text += Invoke-Command @ServerSettings -Credential $cred -ArgumentList ($_,$RDFSettings,$RPFSettings,$AdminUser) -ScriptBlock{
Param($User,$RDF,$RPF,$AdminUser)
("User entfernt: "+$user.SamAccountName)
$profilePath = $RDF.Item("Path") + $user.SamAccountName
$profilePath2 = $RPF.Item("Path") + $user.SamAccountName + ".V2"
Add-NTFSAccess -Path $profilePath -AccessRights FullControl -Account $AdminUser
Remove-Item -Path $profilePath -Recurse -Force
Remove-Item -Path $profilePath2 -Recurse -Force
} -ErrorAction SilentlyContinue -ErrorVariable ErrDelProfile
#Log $ErrDelProfile
}
}
catch
{
Log-Error -LogPath $LogFile -ErrorDesc $_.Exception -ExitGracefully $True
Break
}
}
End
{
If($?){
Log-Write -LogPath $LogFile -LineValue " "
Log-Write -LogPath $LogFile -LineValue $outputBox.Text
Log-Write -LogPath $LogFile -LineValue $ErrDelProfile
Log-Write -LogPath $LogFile -LineValue " "
Log-Write -LogPath $LogFile -LineValue "finished Process"
Log-Write -LogPath $LogFile -LineValue "----------------"
Log-Write -LogPath $LogFile -LineValue " "
}
}
}
Hoffe ihr könnt mir folgen. Gerne Fragen wenn Fragen oder ? entstanden sind.
Vielen Dank
Sebastian
Please also mark the comments that contributed to the solution of the article
Content-ID: 291835
Url: https://administrator.de/contentid/291835
Printed on: December 5, 2024 at 22:12 o'clock
4 Comments
Latest comment
Moin,
ganz klar, dein Problem ist hier nicht Invoke-Command sondern der Parameter -Account welchem du mit $AdminUser eine Variable des Typ hashtable übergibst und das ist falsch.
Also schreibe den Inhalt der Variablen so
Dann ist auch das CMDlet Add-NTFSAccess zufrieden, denn das akzeptiert nur Strings für den Parameter Account.
Siehe: http://blogs.technet.com/b/heyscriptingguy/archive/2014/11/22/weekend-s ...
Gruß jodel32
p.s. und bitte nutze in Zukunft Codetags für das Posten von Quellcode, denn sonst gehen Sonderzeichen verloren! Danke.
ganz klar, dein Problem ist hier nicht Invoke-Command sondern der Parameter -Account welchem du mit $AdminUser eine Variable des Typ hashtable übergibst und das ist falsch.
Also schreibe den Inhalt der Variablen so
$AdminUser = $ConfigFile.Settings.User.Admin
Siehe: http://blogs.technet.com/b/heyscriptingguy/archive/2014/11/22/weekend-s ...
Gruß jodel32
p.s. und bitte nutze in Zukunft Codetags für das Posten von Quellcode, denn sonst gehen Sonderzeichen verloren! Danke.
Zitat von @skahle85:
Mit der Übergabe war ich auch schon soweit, lieferte mir allerdings kein Ergebnis. An welcher Stelle sollte denn die Variable übergeben werden?
Du musst nur die Deklaration ändern Zeile 5-7Mit der Übergabe war ich auch schon soweit, lieferte mir allerdings kein Ergebnis. An welcher Stelle sollte denn die Variable übergeben werden?
Hast du den Link gelesen, dort steht was Add-NTFSAccess an Parametern und in welchen Format es diese erwartet, was ist also nicht klar ???
Keine Hashtable sondern simpler Account-String
DOM\User