em nossos fóruns da Comunidade PowerShell, recebemos recentemente perguntas perguntando se é possível armazenar variáveis PowerShell em arquivos externos, e se assim, como é feito. É realmente possível armazenar variáveis em arquivos externos para o PowerShell usar. Estas variáveis externas podem ser armazenadas em uma variedade de tipos de arquivos. Armazená-los em um arquivo PowerShell é um dos mais fáceis porque você pode apenas dot source estes arquivos.
vamos cobrir os seguintes métodos para armazenar variáveis:
- Arquivos de Script
- Arquivos de Texto
- JSON Arquivos
- Arquivos XML
Os exemplos mostrados neste post são bastante simples, mas isso não quer dizer que não é possível armazenar bastante variáveis complexas em arquivos externos. Se você quiser experimentar com o armazenamento de variáveis externas, você pode baixar os arquivos de amostra para este post aqui.
Script Files
Dot sourcing pode ser a maneira mais fácil de armazenar variáveis externas—mas nem sempre é a mais segura. Quando um arquivo é de fonte de ponto estamos dizendo a PowerShell para executar esse script. Se houver algum código malicioso no arquivo, então esse código também será executado.
em adição ao dot sourcing, também terá de garantir que o programa PowerShell das variáveis externas é assinado e que a Execução Remota está activa na sua máquina.
Dot sourcing pode ser útil se precisarmos de obter informações sobre algo dinamicamente. Para as outras opções discutidas neste post, os dados armazenados nos tipos de arquivos terão que ser alterados manualmente.
1234 |
# aqui nós dot source O arquivo PowerShell das variáveis externas. "C:\Test\BlogPosts\ExternalVariables.ps1" Write-Host $External_Variable1 $External_Variable2
|
Aqui é o que está no ExternalVariables.arquivo ps1:
#Declaração de variáveis Externas
$External_Variable1 = ‘Sapiens’
$External_Variable2 = ‘Tecnologias’
Arquivos de Texto
variáveis Externas também podem ser armazenados em uma série de arquivos de texto e formatos, tais como texto sem formatação em geral .o ficheiro txt com o cmdlet de obter o conteúdo. Quando importamos variáveis desta forma, não estamos executando nenhum código, então não é um problema se você não monitora constantemente os arquivos para obter informações.
as três imagens seguintes são exemplos de diferentes formas de armazenar informações em um arquivo de texto simples:
12345678910111213 |
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path$ScriptDir + = " \ExternalVariables.txt" # Use obter conteúdo para obter todas as linhas que estão em arquivos txt $External_Variables = Get-Content -Path $ScriptDir #As Informações do ExternalVariables vem na forma de uma matriz #Para imprimir todas as strings em $programa usamos um foreach loopforeach ($string em $External_Variables){Write-Host $cadeia}
|
Aqui é o que está no ExternalVariables.ficheiro txt:
“PowerShell Studio
PrimalScript
Version Recall”
assim como um array, podemos armazenar tabelas de hash em arquivos de texto. Para obter a nossa tabela de hash a partir de um arquivo de texto, teremos que canalizar a saída do conteúdo de Get para o cmdlet convertendo-StringData para converter a saída em uma tabela de hash.
1234567891011121314 |
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path$ScriptDir + = " \ExternalVariablesHashTable.txt"# para Obter o conteúdo da Variável Externa arquivo de texto# Este arquivo é armazenar no plano de texto e não é em qualquer formato especial # usamos o "raw" parâmetro aqui no Get-Content para que, quando chegar o conteúdo# do arquivo para que o nosso hashtable não é convertido para um objeto$programa = Get-Content -matérias -Path $ScriptDir | ConvertFrom-StringData write-host "`nType da variável `$programa n"$programa.GetType() write-host "`nPrinting `$programa" $programa
|
Aqui é o que está no ExternalVariablesHashTable.txt:
Company = Sapien Technologies
Product = PowerShell Studio
armazenar informação num ficheiro de texto como este é uma forma conveniente de manter a informação num formato legível pelo homem. Os arquivos de texto também vêm com o benefício de não ser executável, então se acontecer de haver código malicioso armazenado em um arquivo que você não gerencia regularmente ele não será executado.
JSON File
também é possível armazenar variáveis externas em um formato JSON. A única ressalva é que vamos precisar mais uma vez canalizar a saída de Get-Content para outro cmdlet; no entanto, desta vez é convertida de-Json em vez de convertida de-StringData. Para aqueles não familiarizados com JSON ou precisa retocar o formato, por favor visite www.JSON.org.
1234567891011121314151617 |
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path$ScriptDir + = " \jsonfile.json"#Obtendo informações do arquivo json#A nós passar a saída do comando Get-Content para ConvertFrom-Json Cmdlet$JsonObject = Get-Content $ScriptDir | ConvertFrom-Json #agora temos uma matriz, o que significa que temos ao índice#de um elemento e usa-lo$JsonObject.Usuários #Quando indexados podemos chamar os atributos do elementsWrite-Host "Atributos individualmente printed"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId
|
Aqui é o que está no Arquivo JSON:
{
“Usuários”:
}
Arquivo XML
Se nós armazenamos nossos variáveis em um formato XML, podemos adicionar comentários para a variável arquivo, se necessário. Os dois únicos formatos de arquivo que vamos falar neste post que permite Comentários são XML ou PS1. JSON e os arquivos txt normais não permitem comentários. Para uma visão geral concisa do formato XML, visite w3schools.com/xml.
123456789 |
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path$ScriptDir + = " \XMLFile.xml " #Read in all of the information from our variables XML file#We will need to cast the variable as when we store all of the file information in it $XML_Variable = Get-Content-Path $ScriptDir #Referencing the Food Object array stored within the Breakfast Object$XML_Variable.Breakfast_menu.Alimentos | Format-List
|
Aqui é o que está no arquivo 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
900Baga-Baga Waffles Belgas
$8.95
waffles belgas cobertas de bagas frescas sortidas e chantilly
900
ao escolher entre formatos de armazenamento XML e JSON, ele se resume a qual é mais familiar. Uma vez que a principal diferença entre eles é que XML permite comentários, é apenas uma questão de preferência. Todas essas opções são formas viáveis de armazenar informações em arquivos externos para ser lido por outro programa ou usado pelo mesmo programa em um momento posterior. Quão complexo, seja dinâmico ou não, e quanta informação precisa ser armazenada irá ditar o formato a usar.
exportar para arquivos
assim como importar informações com PowerShell, também é possível exportar informações e objetos para um arquivo externo do programa que estamos usando. PowerShell Studio 2018 vem com trechos que tornam a exportação de informações muito mais fácil—simplesmente passar o caminho do arquivo externo e do objeto para a função de exportação correspondente e o trecho irá cuidar de tudo o resto. Vamos cobrir a exportação para arquivos usando excertos em um futuro post do blog.