请查看以下URL:URL
现在它说了以下关于下载的脚本:
运行从Internet下载但未签名的脚本(如果脚本被取消阻止(,例如使用Unblock File cmdlet。
我刚刚从technet库(PS2EXE(下载了一个脚本,我可以在不使用Unblock_file cmdlet的情况下运行包含的测试脚本。发生了什么事?我是误解了微软告诉我的,还是这是一个小故障?
help unblock-file
:
Unblock File cmdlet在内部删除Zone.Identifier备用数据流,该数据流的值为"3",表示它是从Internet下载的。
文件"远程"或"来自互联网"的概念是本地计算机文件系统上的数据,这些数据必须由下载文件的工具放在那里,在下载过程中不包括在文件中。
如果你通过Internet Explorer下载了一个文件,可能是FireFox、Invoke-WebRequest,它们会添加它。如果你用其他东西下载,该工具可能不会添加这个备用流。
查看其行为:
# Show folder is empty
PS C:temp> Get-ChildItem
# Make a test script which prints Hello World, and run it
PS C:temp> "'Hello World'" | Set-Content -Path .test.ps1
PS C:temp> .test.ps1
Hello World
# Show the file exists
PS C:temp> Get-ChildItem
Directory: C:temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 01/08/2018 22:07 15 test.ps1
# Add the Zone Identifier alternate data stream
PS C:temp> "[ZoneTransfer]`nZoneId=3" | Set-Content -Path 'test.ps1' -Stream 'Zone.Identifier'
# Show that it doesn't appear in a normal directory listing:
PS C:temp> Get-ChildItem
Directory: C:temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 01/08/2018 22:08 15 test.ps1
# Show how it blocks the file from running
PS C:temp> .test.ps1
.test.ps1 : File C:temptest.ps1 cannot be loaded. The file C:temptest.ps1 is not digitally signed. You cannot
run this script on the current system. For more information about running scripts and setting execution policy, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
# Show file content
PS C:temp> Get-Content -Path .test.ps1
'Hello World'
# Show alternate data stream content
PS C:temp> Get-Content -Path .test.ps1 -Stream 'Zone.Identifier'
[ZoneTransfer]
ZoneId=3
# Unblock-File removes this alternate stream
PS C:temp> Unblock-File .test.ps1
# Script runs again
PS C:temp> .test.ps1
Hello World
所以主要的问题是,如果你运行Get-Content file.ps1:Zone.Identifier
,看到ZoneId是3
,仍然可以运行脚本,和Get-ExecutionPolicy
是RemoteSigned,那么你会发生一些奇怪的事情。
但我的猜测是下载工具没有添加这些数据,所以该文件看起来就像本地创建的文件。
注:。RemoteSigned不是一个安全功能,它是一个"帮助防止在读取脚本并故意选择运行脚本之前意外运行脚本"复选框,就像一个"你确定吗?"框,而不是密码提示。