Eu estou tentando executar um script da pasta compartilhada que eu confio:
PowerShell -file "\\server\scripts\my.ps1"
Mas recebo um aviso de segurança e tenho que pressionar 'R' para continuar
Aviso de Segurança Execute apenas os scripts que Você confia. Embora os scripts da Internet Possam ser úteis, esse script Pode prejudicar seu computador. Do Você quer executar \Server\scripts\my.ps1? [D] Não Execute [R] Execute uma vez [S] Suspender [?] Ajuda (o padrão é "D"): d
Posso ignorar este aviso? O pseudo código desejado que eu quero é:
PowerShell -IGNORE_SECURITY_WARNING -file "\\server\scripts\my.ps1"
Isso é mencionado em "Políticas de Execução do PowerShell em Imagens Padrão" no Blog de Lee Holmes e "Princípios de Orientação de Segurança do PowerShell" no Blog do Windows Power Shell .
Summary Algumas máquinas tratam os caminhos UNC como a grande internet ruim, então o PowerShell os trata como arquivos remotos. Você pode desativar esse recurso nesses servidores (UncAsIntranet = 0,
) ou adicionar os computadores remotos a seus hosts confiáveis.
Se você não quiser fazer nada, o PowerShell v2 suporta um parâmetro -ExecutionPolicy
que faz exatamente o que seu pseudocódigo deseja. PowerShell -ExecutionPolicy Bypass -File (...)
.
Para evitar avisos, você pode:
Set-ExecutionPolicy bypass
Se você estiver encontrando esse erro em um script PowerShell baixado, você pode desbloquear o script desta maneira:
Clique com o botão direito do mouse no arquivo .ps1
em questão e selecione Properties
Clique em Desbloquear nas propriedades do arquivo.
Clique em OK
Apenas atribua 1 à variável de env SEE_MASK_NOZONECHECKS
$env:SEE_MASK_NOZONECHECKS = 1
Start-Process $msi_file_path /qn -Wait | out-null
Tente isso, edite o arquivo com:
notepad foo.ps1:Zone.Identifier
E defina 'ZoneId = 0'
Você deseja definir a política de execução em sua máquina usando Set-ExecutionPolicy:
Set-ExecutionPolicy Unrestricted
Você pode querer investigar as várias políticas de execução para ver qual delas é a certa para você. Dê uma olhada no "help about_signing
" para mais informações.
Eu fiz este script PowerShell para desbloquear todos os arquivos em um compartilhamento no meu servidor
Get-ChildItem "\\ServerName\e$\MyDirectory\" -Recurse -File | % {
Unblock-File -Path $_.FullName
}
Você baixou o script da internet?
Em seguida, remova o fluxo NTFS do arquivo usando a linha de comando do/sysinternal streams.exe .
cmd> streams.exe .\my.ps1
Agora tente executar o script novamente.
Nada disso funcionou na minha instância específica. O que foi mudando para um nome NetBIOS do FQDN.
Ao invés de:\\server.domain.net\file.ps1
usar:\\server\file.ps1
Usar o nome ignora a configuração "detectar automaticamente a rede da intranet" no IE.
Veja a Opção 1 no blog aqui: http://setspn.blogspot.com/2011/05/running-powershell-scripts-from-unc.html
Suponha que você precise iniciar o script ps a partir da pasta compartilhada
copy \\\server\script.ps1 c:\tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:\tmp.ps1 && del /f c:\tmp.ps1
P.S. Reduzir o googling)
É muito simples de fazer, abra seu PowerShell e escreva o seguinte comando se você tiver o número de arquivos ps1. aqui você tem que mudar o caminho com o seu caminho.
PS C:\Users> Get-ChildItem -Path "D:\downlod" -Recurse | Unblock-File
Tente set-executionpolicy "Policyname" -force switch e o aviso pop-up não deve vir.