2017-11-07 5 views
-1

Ich bin immer noch sehr neu in Powershell und ich dachte, das wäre eine einfache Aufgabe. Für meinen Job muss ich eine Reihe von Ordnern erstellen, immer und immer wieder und an diesem Punkt bin ich es leid, dies mit einer Maus zu tun, wenn ich die Aufgabe automatisieren und zu dringenderen Problemen übergehen könnte. Unten ist ein Beispiel von dem, was ich versuche zu tun.New-Item: Zugriff verweigert

Ich dachte mir, ich könnte meine Anmeldeinformationen zu new-item übergeben und es die Verzeichnisse erstellen lassen. Stattdessen erhalte ich einen Fehler, der unten aufgeführt wird. Wenn ich versuche, dieses Skript ohne Angabe von Anmeldeinformationen auszuführen, wird der zweite Fehler angezeigt.

Erster Fehler:

The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.

Zweiter Fehler:

New-item : Access to the path 'MAKEthisFOLDER' is denied.

Ich weiß, das ist unglaublich einfach, aber alle Gedanken würde sehr geschätzt werden.

+0

Hat Ihr aktuelles Benutzerkonto die Berechtigung, die Änderung an diesem Ziel vorzunehmen? Wenn dies der Fall ist, muss "-Credential" nicht angegeben werden. – TheIncorrigible1

+0

Wenn Ihr Konto keinen Zugriff auf diesen Speicherort hat, würde ich vorschlagen, "-Credential $ cred" ebenfalls an "Test-Path" zu übergeben, da sonst der Zugriff ausfällt abgelehnt. – TheIncorrigible1

+0

@iRon 'env:' ist ein Laufwerk ja, aber das Aufrufen einer Variablen von diesem Laufwerk ist nur eine Zeichenfolge. '$ env: HomeDrive.GetType() => System.String' – TheIncorrigible1

Antwort

0

Wenn Ihr Benutzerkonto Zugriff auf die angegebenen Speicherorte hat, müssen die Anmeldeinformationen nicht angegeben werden. Wenn dies jedoch der Fall ist, sollten Sie die Anmeldeinformationen auch an Test-Path weitergeben, um eine gültige Antwort zu erhalten.

$Credential = Get-Credential 
$Path = "$env:HOMEDRIVE\Inetpub\wwwroot\MAKEthisFOLDER" 

If (-not (Test-Path -Path $Path -Credential $Credential -PathType 'Container')) 
{ 
    ## -Force creates the folder structure if it doesn't exist 
    New-Item -Path $Path -ItemType 'Directory' -Credential $Credential -Force 
} 
Else 
{ 
    Write-Host "'$Path' already exists" -ForegroundColor 'Yellow' -BackgroundColor 'Red' 
} 

Eine Alternative (das sollte unabhängig von anderen Faktoren arbeiten)

New-PSDrive -Name 'INET' -PSProvider 'FileSystem' -Root "$env:HomeDrive\Inetpub\wwwroot" -Credential (Get-Credential) 
If (-not (Test-Path -Path 'INET:\MAKEthisFOLDER')) 
{ 
    New-Item -Path 'INET:\MAKEthisFOLDER' -ItemType 'Directory' 
} 
Else 
{ 
    Write-Host "Folder already exists" -ForegroundColor 'Yellow' -BackgroundColor 'Red' 
} 
Remove-PSDrive -Name 'INET' 
+0

' Test-Pfad -Pfad $ Pfad -Credential $ Credential' gibt seinen ersten Fehler über den FileSystem-Provider zurück – Jelphy

+0

@Jelphy Vorausgesetzt, Standardwerte, '$ env: HOMEDRIVE' verrechnet zu 'C:' oder 'D:' literalen Strings. Wenn er ein Skript erstellt, sollte er explizit Argumente definieren, damit kryptische Nachrichten wie diese nicht passieren. Es wäre SEHR seltsam, wenn diese Laufwerke nicht gemappt sind. – TheIncorrigible1

0

mit New-PSDrive Versuchen und weisen Anmeldeinformationen es mag:

$cred = Get-Credential 
$Test1 = Test-Path "$env:HOMEDRIVE\Inetpub\wwwroot\MAKEthisFOLDER" 

if ($test1 -eq $false) { 
    $homedrive = $env:HOMEDRIVE 
    New-PSDrive -Name $homedrive -PSProvider FileSystem -Root "\\Inetpub\wwwroot\MAKEthisFOLDER" -Credential $cred 
    new-item "$env:HOMEDRIVE\Inetpub\wwwroot\MAKEthisFOLDER" -ItemType Directory 
} 
else { 
Write-Host "Folder already exists" -ForegroundColor Yellow -BackgroundColor red } 

Das fehlt noch der Ordner vorhanden ist.