SAPIEN Technologies

na naszych forach społecznościowych PowerShell niedawno otrzymaliśmy pytania, czy możliwe jest przechowywanie zmiennych PowerShell w plikach zewnętrznych, a jeśli tak, to jak to się robi. Rzeczywiście możliwe jest przechowywanie zmiennych w zewnętrznych plikach do użycia przez PowerShell. Te zmienne zewnętrzne mogą być przechowywane w różnych typach plików. Przechowywanie ich w pliku PowerShell jest jednym z najłatwiejszych, ponieważ możesz po prostu dot source tych plików.

omówimy następujące metody przechowywania zmiennych:

  • pliki skryptów
  • pliki tekstowe
  • pliki JSON
  • pliki XML

przykłady przedstawione w tym poście są dość proste, ale to nie znaczy, że nie jest możliwe przechowywanie dość złożonych zmiennych w plikach zewnętrznych. Jeśli chcesz eksperymentować z przechowywaniem zmiennych zewnętrznych, możesz pobrać przykładowe pliki do tego postu tutaj.

pliki skryptów

pozyskiwanie kropek może być najłatwiejszym sposobem przechowywania zmiennych zewnętrznych—ale nie zawsze jest to najbezpieczniejsze. Gdy plik jest pozyskiwany z kropek, mówimy Powershellowi, aby wykonał ten skrypt. Jeśli w pliku znajduje się złośliwy kod, ten kod również zostanie uruchomiony.

w dodatku do dot sourcing, musisz również upewnić się, że skrypt PowerShell zmiennych zewnętrznych jest podpisany i że zdalne wykonywanie jest włączone na twoim komputerze.

Dot sourcing może być pomocny, jeśli potrzebujemy uzyskać informacje o czymś dynamicznie. W przypadku innych opcji omówionych w tym poście dane przechowywane w typach plików będą musiały zostać ręcznie zmienione.

1234

# tutaj kropka źródło zewnętrznych zmiennych pliku PowerShell. "C:\Test\BlogPosts\ExternalVariables.ps1" Write-Host $External_Variable1 $External_Variable2

oto, co znajduje się w pliku ExternalVariables. ps1:

#Deklaracja zmiennych zewnętrznych
$External_Variable1 = 'Sapien’
$External_Variable2 = 'technologie’

pliki tekstowe

zmienne zewnętrzne mogą być również przechowywane w wielu plikach tekstowych i formatach, takich jak zwykły tekst w ogólnych .plik txt za pomocą polecenia Get-Content. Kiedy importujemy zmienne w ten sposób, nie uruchamiamy żadnego kodu, więc nie ma problemu, jeśli nie monitorujesz stale plików, aby uzyskać informacje.

poniższe trzy zdjęcia są przykładami różnych sposobów przechowywania informacji w prostym pliku tekstowym:

12345678910111213

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Ścieżka$ScriptDir + = " \ ExternalVariables.txt " # Use get content to get all the lines that are in the TXT files $External_Variables = Get-Content-Path $ScriptDir #informacje z zmiennych zewnętrznych są w formie tablicy # tak więc aby wydrukować wszystkie ciągi znaków w $programie używamy pętli foreach ($string in $External_Variables) {Write-Host $string}

oto, co jest w Zewnętrznymróżne.plik txt:

„PowerShell Studio”
„PrimalScript”
„Przypomnienie wersji”

podobnie jak tablica, możemy przechowywać tabele skrótu w plikach tekstowych. Aby uzyskać naszą tabelę hashową z pliku tekstowego, będziemy musieli przepuścić wyjście Get-Content do polecenia ConvertFrom-StringData, aby przekonwertować wyjście na tabelę hashową.

1234567891011121314

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Ścieżka$ScriptDir + = " \ ExternalVariablesHashTable.txt "# pobieranie zawartości zewnętrznego pliku tekstowego zmiennej # ten plik jest przechowywany w tekście planu i nie jest w żadnym specjalnym formacie # używamy tutaj parametru "raw"w Get-Content tak, że gdy otrzymamy zawartość # pliku, aby nasza tabela hashtable nie została przekonwertowana do obiektu$program = Get-Content-raw-Path $ScriptDir | ConvertFrom-StringData write-host "'nType zmiennej' $program ' N " $program.GetType () write-host "`nPrinting '$program " $program

oto co jest w ExternalVariablesHashTable.txt:

firma=Sapien Technologies
produkt=PowerShell Studio

przechowywanie informacji w takim pliku tekstowym jest wygodnym sposobem przechowywania informacji w formacie czytelnym dla człowieka. Pliki tekstowe mają również tę zaletę, że nie są wykonywalne, więc jeśli okaże się, że w pliku, którym regularnie nie zarządzasz, znajduje się złośliwy kod, nie zostanie on wykonany.

plik JSON

możliwe jest również przechowywanie zmiennych zewnętrznych w formacie JSON. Jedynym zastrzeżeniem jest to, że będziemy musieli ponownie przepuścić wyjście Get-Content do innego cmdletu; jednak tym razem jest to ConvertFrom-Json, a nie ConvertFrom-StringData. Dla tych, którzy nie znają JSON lub potrzebują odświeżyć format, odwiedź www.JSON.org.

1234567891011121314151617

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Ścieżka$ScriptDir + = " \jsonfile.json" # pobieranie informacji z pliku json#przekazujemy wyjście z Get-Content do Convertfrom-JSON Cmdlet$JsonObject = Get-Content $ScriptDir / ConvertFrom-Json #w tej chwili mamy tablicę, co oznacza, że musimy indeksować # element, aby go użyć$JsonObject.Users #po zindeksowaniu możemy nazwać atrybuty elementu-Host "atrybuty indywidualnie printed"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId

oto co znajduje się w pliku JSON:

{
„użytkownicy”:
}

plik XML

jeśli przechowujemy nasze zmienne w formacie XML, możemy w razie potrzeby dodać komentarze do pliku zmiennej. Jedyne dwa formaty plików, o których będziemy mówić w tym poście, który pozwala na komentarze, to XML lub PS1. JSON i zwykłe pliki TXT nie zezwalają na komentarze. Aby uzyskać zwięzły przegląd formatu XML, odwiedź w3schools.com/xml.

123456789

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Ścieżka$ScriptDir += "\XMLFile.xml " #odczyt wszystkich informacji z pliku XML naszych zmiennych#będziemy musieli rzucić zmienną tak, jak wtedy, gdy przechowujemy w niej wszystkie informacje o pliku $XML_Variable = Get-Content-Path $ScriptDir #odwoływanie się do tablicy obiektów Food przechowywanej w obiekcie Breakfast$XML_Variable.Śniadania_menu.Food / Format-List

oto, co znajduje się w pliku XML:


Belgian Waffles
.95
Two of our famous Belgian Waffles with plenty of real maple syrup
650
Strawberry Belgian Waffles
.95
Light Belgian waffles covered with strawberries and whipped cream
900

jagodowe Gofry belgijskie
8 zł.95
belgijskie gofry pokryte różnymi świeżymi jagodami i bitą śmietaną
900

wybierając między formatami pamięci masowej XML i JSON, sprowadza się do tego, który z nich jest bardziej znany. Ponieważ główna różnica między nimi polega na tym, że XML pozwala na komentarze, jest to tylko kwestia preferencji. Wszystkie te opcje są realnymi sposobami przechowywania informacji w plikach zewnętrznych, które mogą być odczytywane przez inny program lub używane przez ten sam program w późniejszym czasie. To, jak złożony, czy jest dynamiczny, czy nie, i jak wiele informacji musi być przechowywanych, decyduje o formacie, którego należy użyć.

eksportowanie do plików

podobnie jak importowanie informacji za pomocą PowerShell, możliwe jest również eksportowanie informacji i obiektów do zewnętrznego pliku z programu, którego używamy. PowerShell Studio 2018 jest wyposażony w urywki, które znacznie ułatwiają eksportowanie informacji-po prostu przekaż ścieżkę pliku zewnętrznego i obiektu do odpowiedniej funkcji eksportu, a urywek zajmie się wszystkim innym. Omówimy eksportowanie do plików za pomocą urywków w przyszłym poście na blogu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

More: