Centrum Skryptów - Systemy Operacyjne

W jaki sposób można utworzyć folder na zdalnym komputerze?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

*

W jaki sposób można utworzyć folder na zdalnym komputerze?

Cześć, Skrypciarze! Czy za pomocą skryptu można utworzyć folder na zdalnym komputerze?

-- AN

Cześć, AN. Życie jest pełne tajemnic. Jedna z nich to: co opętało twórcę napoju Clamato, odrażającej mikstury zawierającej sok pomidorowy i wywar z małży? Inna brzmi: dlaczego ani FileSystemObject, ani WMI nie umożliwia tworzenia folderów na zdalnym komputerze bez nadmiernego kombinowania?

Szczerze mówiąc, nie znamy odpowiedzi na żadne z tych pytań. Jednak znamy odpowiedź na pytanie: „Czy można za pomocą skryptu utworzyć folder na zdalnym komputerze?” Odpowiedź jest twierdząca, chociaż trzeba pogodzić się z tym, że zrobimy to drogą okrężną.

Jak mówiliśmy, tworzenie folderu na zdalnym komputerze jest niemożliwe zarówno w FileSystemObject, jak i w WMI. FileSystemObject dysponuje metodą tworzenia folderów, ale działa ona niemal wyłącznie na komputerze lokalnym. W WMI istnieją metody kopiowania folderów, przenoszenia ich, zmieniania ich nazw i robienia wszystkiego, co tylko można wymyślić… oprócz ich tworzenia. Jak się więc za to zabrać?

Otóż należy skorzystać z możliwości tworzenia procesów na zdalnym komputerze, jakie daje WMI. Za pomocą WMI możemy połączyć się ze zdalnym komputerem (przy założeniu, że dysponujemy uprawnieniami lokalnego administratora) i uruchomić na nim dowolny program. Załóżmy, że mamy palącą potrzebę uruchomienia kalkulatora na komputerze zdalnym atl-ws-01. Załatwi to następujący kod:

strComputer = "atl-ws-01"

Set objWMIService = GetObject _

    ("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")

errReturn = objWMIService.Create _

    ("calc.exe", Null, Null, intProcessID)

Jeśli komputer zdalny działa w systemie Windows 2000, to użytkownik zobaczy na ekranie okno kalkulatora. Natomiast w systemach Windows XP i Windows Server 2003, kalkulator się uruchomi, ale nic nie będzie widać – ze względów bezpieczeństwa procesy uruchomione zdalnie otwierane są w ukrytych oknach. Odpowiedni proces można zobaczyć w menedżerze zadań.

Co to znaczy dla nas? Jak wiadomo, utworzenie folderu na komputerze lokalnym jest łatwe. Wystarczy wpisać w wierszu poleceń coś takiego:

md c:\newfolder

Polecenie to utworzy nowy folder (md to skrót od make directory – utwórz katalog) o nazwie C:\Newfolder. Co zrobić, aby utworzyć folder na komputerze zdalnym? Jeden ze sposobów to uruchomienie na nim polecenia md. Można to zrobić:

  • Używając WMI do połączenia się z klasą Win32_Process komputera zdalnego.
  • Używając metody Create, aby utworzyć proces uruchamiający polecenie md c:\newfolder.

Czy to możliwe? Jasne, że tak. Oto skrypt, który utworzy nowy folder na komputerze atl-ws-01:

strComputer = "atl-ws-01"

Set objWMIService = GetObject _

    ("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")

errReturn = objWMIService.Create _

    ("cmd.exe /c md c:\newfolder", Null, Null, intProcessID)

Przyjrzyjmy się czterem parametrom metody Create:

Parametr Opis
cmd.exe /c md c:\newfolder Polecenie wiersza poleceń, tworzące nowy folder. Zauważmy, że musimy w poleceniu uwzględnić fragment cmd.exe – md nie jest samodzielnym plikiem wykonywalnym. Nakazujemy więc WMI uruchomić cmd.exe, a potem wykonać polecenie md.
Null Ustawia folder roboczy procesu. Nie ma to znaczenia w naszym skrypcie, więc podajemy pusty parametr.
Null Oznacza konfigurację startową procesu. Ponownie nie ma to znaczenia w naszym skrypcie, więc jest to kolejny pusty parametr.
intProcessID Parametr wyjściowy, przechowujący identyfikator utworzonego procesu. Wykonanie polecenia md zajmuje tylko chwilę, więc za bardzo się on nam nie przyda. Gdybyśmy jednak wykonywali bardziej złożone zadanie, zajmujące kilka minut, moglibyśmy dzięki temu parametrowi monitorować, czy zostało już ukończone i otrzymać o tym powiadomienie.
 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjne