Kopiowanie PowerChell DSC z udziału sieciowego

17

Próbuję użyć programu PowerShell DSC do skopiowania zawartości folderu z udziału sieciowego. Oto kod:

Configuration TestSetup {
    Node localhost {
        File Test {
            SourcePath = "\\Server\SomeShare\SomeFolder"
            DestinationPath = "E:\test"
            Recurse = $true
            Type = "Directory"
        }
    }
}

To jednak nie działa - po uruchomieniu pojawia się następujący komunikat o błędzie:

The related file/directory is: \\Server\SomeShare\SomeFolder.
The path cannot point to the root directory or to the root of a net share.
SourcePath must be specified if you want to configure the destination directory recursively. Make sure that SourcePath is a directory and that it is accessible.
    + CategoryInfo          : InvalidArgument: (:) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : localhost

The SendConfigurationApply function did not succeed.
    + CategoryInfo          : InvalidArgument: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : localhost

Podobne wyniki uzyskuję, próbując zainstalować pakiet z udziału sieciowego lub wyodrębnić archiwum z udziału sieciowego. Korzystam z programu PowerShell 4 w systemie Windows Server 2008 R2 z dodatkiem SP1.

Czy istnieje sposób używania PowerShell DSC z udziałami sieciowymi?

Richard
źródło
Czy to łącze nie opisuje rozwiązania? powershellmagazine.com/2013/09/02/…
ErikE
Dzięki za wskazanie mi właściwego kierunku. Nie do końca mnie to doprowadziło, ponieważ udział był na tym samym komputerze, więc musiałem udzielić uprawnień do konta SYSTEM. Jeśli chcesz odpowiedzieć wskazując na ten link, przyznam ci nagrodę.
Richard

Odpowiedzi:

14

Menedżer konfiguracji lokalnej DSC działa jako lokalne konto SYSTEM, a nie konto użytkownika. Dlatego nie będzie mógł uzyskać dostępu do zasobów sieciowych, chyba że otrzyma wyraźne uprawnienia.

Istnieją dwie możliwe sytuacje. Albo udział znajduje się na tym samym komputerze, na którym stosowana jest konfiguracja DSC (nazwijmy ten komputer A), albo udział znajduje się na innym komputerze (nazwijmy ten komputer B).

Jeśli udział znajduje się na komputerze A, użytkownik SYSTEM musi uzyskać uprawnienia do odczytu. Na przykład:

net share SomeShare=C:\SomeShare /GRANT:"NT AUTHORITY\SYSTEM",READ

Jeśli udział znajduje się na komputerze B, uprawnienia do odczytu należy udzielić na koncie komputera na komputerze A. Na przykład:

net share SomeShare=C:\SomeShare /GRANT:DOMAIN\MachineA$,READ

Źródło: http://www.powershellmagazine.com/2013/09/02/copying-powershell-modules-and-custom-dsc-resources-using-dsc/

Richard
źródło
5

Że DSCbiegnie on localhostw celu zastosować konfigurację. Oznacza to, że DSCpliki zasobów muszą być rozpowszechniane na każdym komputerze, za pomocą którego ma zostać skonfigurowany DSC.

Zarządzanie uprawnieniami ma zatem kluczowe znaczenie podczas kopiowania plików DSC z udziału.

DSCdziała pod NT AUTHORITY\SYSTEMkontem i jeśli ten Credentialatrybut nie został ustawiony, Computer accountjest używany podczas pobierania plików z udziału sieciowego.

Dlatego w zależności od tego, gdzie pliki są ściągane od, SYSTEMpotrzeba konta zostać przyznane readuprawnienia lokalnego udziału i Computer accountkonieczności zostać przyznane readuprawnienia na zdalnym akcję.

Jest to konkretnie szczegółowo opisane w odpowiedzi Richardsa, która rozwija oryginalną składnię oryginalnych blogów dla tych informacji.

ErikE
źródło
0

W tej chwili nie mam czasu, aby przyjrzeć się temu bliżej, ale wygląda na to, że można bezpiecznie przekazać poświadczenia do użycia przez lokalnego menedżera konfiguracji. W blogu jego przykład wykorzystuje zasób Plik do pobierania plików z udziału sieciowego. Mam nadzieję, że wkrótce to wypróbuję, a potem wrócę, by lepiej poznać tę odpowiedź.

Blog TechNet: Chcesz zabezpieczyć poświadczenia w konfiguracji żądanego stanu Windows PowerShell? - autor: Travis Plunk

Nathan Hartley
źródło
-2

Powershell jest prawie tak głupi jak stara powłoka cmd. Nadal ma bardzo ograniczone wsparcie dla ścieżek UNC. Mając to na uwadze ... próbowałeś aliować ścieżkę UNC? to znaczy

New-PSDrive -Name UNCPath -PSProvider FileSystem -Root \\Server\SomeShare\

A następnie określ ścieżkę jako UNCPath:\SomeFolder. Porządkowanie Remove-PSDrivepo zakończeniu.

Czasami można również określić FileSystem::\\Server\SomeShare\SomeFolderjako ścieżkę. Widziałem przypadki, w których to nie działa ... ale warto spróbować.

TheCompWiz
źródło
W tym kontekście (dane konfiguracyjne) FileSystem::\\Server\SomeShare\SomeFolderjest zdecydowanie najlepsza droga
Mathias R. Jessen
2
Dziękuję za sugestie, ale niestety przy użyciu którejkolwiek z nich pojawia się komunikat o błędzieRelative path is not supported
Richard