Obter aviso do PowerShell sobre scripts de volta

2

Encontrei várias perguntas sobre como suprimir avisos como este:

Security Warning Run only scripts that you trust. While scripts from the Internet can be useful, this script can potentially harm your computer. Do you want to run .\myscript.ps1? [D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"):

Mas eu tenho o problema inverso. Misteriosamente desapareceu e eu quero de volta. Eu não tenho controle total sobre a máquina, então é possível que algo tenha mudado sem o meu conhecimento. Minha política de execução está atualmente definida como Restricted , mas não vejo nenhum aviso ao executar powershell -ExecutionPolicy Unrestricted -File .\myscript.ps1 , mesmo que eu a tenha visto regularmente antes.

Por que eu quero de volta?

A máquina em questão é uma máquina de teste fornecida por um cliente. Mais acima na cadeia (nos ambientes de preparação e produção), espero que esse aviso apareça, portanto, quero que minha máquina de teste seja configurada para que eu também a obtenha lá. Bem, normalmente, pelo menos. Meu trabalho geralmente requer apenas responder sim ou suprimi-lo, mas para fins de teste, quero a máquina de teste o mais parecida possível com as máquinas de produção e de palco.

Eu gostaria pelo menos de saber o que mudou para que eu possa descobrir se isso afetaria o preparo e a produção, então qualquer sugestão sobre o que isso poderia ajudar ajudaria.

    
por jpmc26 23.07.2013 / 03:18

1 resposta

4

O @Jscott tem razão que este é o fluxo de dados NTFS alternativo do Zone.Identifier, juntamente com a política de execução do Powershell, que causa esta mensagem. Estas são as únicas duas coisas que se juntam para fazer com que esta mensagem aconteça.

"I don't have full control over the machine, so it's possible something got changed without my knowing."

Uma máquina tem várias políticas de execução diferentes do Powershell. Por padrão, se você digitar apenas Get-ExecutionPolicy , apenas a política de execução do usuário atual será mostrada.

PS C:\users\ryan> Get-ExecutionPolicy -List

Scope               ExecutionPolicy
-----               ---------------
MachinePolicy       Undefined
UserPolicy          Undefined
Process             Undefined
CurrentUser         Undefined  
LocalMachine        Unrestricted

Ao fazer Set-ExecutionPolicy Unrestricted -Scope LocalMachine , você altera a política de execução para todos os usuários dessa máquina. Eu não vejo você fazendo essa distinção no seu post, então eu acho que você pode não perceber isso.

Se você não tiver direitos de administrador na máquina, não poderá alterar a política de execução do LocalMachine.

A outra metade da história é o fluxo alternativo do Zone.Identifier. Se os arquivos não tiverem esse fluxo de dados alternativo, você não verá esta mensagem.

Você mencionou que baixou esses scripts via WinSCP. Para que um arquivo baixado de um local de rede contenha esse fluxo de dados alternativo, ele deve ter sido baixado por um aplicativo compatível com ADS do Zone.Identifier, como um navegador da Web moderno ou o Windows Explorer. O WinSCP não é um desses aplicativos.

É por isso que os fluxos de dados alternativos do NTFS não são o que eu consideraria ser muito usado - porque é muito fácil perder o fluxo de dados alternativo se o arquivo não for transferido da maneira correta. Embora possam ser bastante úteis para armazenar metadados.

Então, vamos consertar seu problema agora. Por que não apenas reconstruir o fluxo de dados alternativo no script para que o Powershell pense novamente que você baixou essa coisa da Internet? O fato de você estar perdendo o ADS é por que você não está vendo um aviso de segurança ou um botão de desbloqueio.

Para visualizar o ADS (e confirmar que nada está lá, está em branco)

C:\> more < script.ps1:Zone.Identifier:$DATA

Para sobrescrevê-lo:

C:\> echo [ZoneTransfer] > script.ps1:Zone.Identifier:$DATA

Adicione a segunda linha:

C:\> echo ZoneId=3 >> script.ps1:Zone.Identifier:$DATA

Assim, o ADS inteiro deve ficar assim quando você digita:

C:\>more < script.ps1:Zone.Identifier:$DATA
[ZoneTransfer]
ZoneId=3

O Windows e o Powershell, mais uma vez, pensarão que você baixou esse arquivo da Internet.

Edit: Ah, e eu quero avisá-lo sobre uma última coisa. Esses "ZoneId" s ... correspondem às Zonas de Segurança (Intranet, Sites Confiáveis, Internet, etc.) que são configuráveis no Internet Explorer. Portanto, se um administrador fez algumas modificações pesadas nessas zonas de segurança do IE, isso também pode afetar o que o Windows vê como um arquivo "potencialmente prejudicial".

    
por 23.07.2013 / 14:19