首页 > 解决方案 > Powershell Get-Random,日期被“此脚本包含恶意内容”阻止

问题描述

我正在为实验室环境生成文件,其中包含用于创建、修改和上次访问的随机日期。这一直运行良好,直到最近 Powershell/VSCode 开始阻止脚本,因为它包含“恶意代码”。几天前,这段代码运行得很好:

$MaximumDate = Get-Date
[datetime]$CreationDate = $MaximumDate.AddYears(-10).Ticks
[datetime]$ModificationDate = Get-Random -Minimum $CreationDate.Ticks -Maximum ($MaximumDate.AddSeconds(-1)).Ticks
[datetime]$LastAccessDate = Get-Random -Minimum $ModificationDate.Ticks -Maximum $MaximumDate.Ticks

从昨天开始运行它时,它会引发以下错误:

At line:3 char:1
+     [datetime]$ModificationDate = Get-Random -Minimum $CreationDate.T ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This script contains malicious content and has been blocked by your antivirus software.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ScriptContainedMaliciousContent

这篇博文表明这是 Windows Defender 造成的。对于该海报,等待新的更新解决了它,但我不太热衷于必须依赖特定的 Windows 更新才能使其工作。这里有一些有趣的发现。

此代码被阻止:

[datetime]$ModificationDate = Get-Random -Minimum $CreationDate.Ticks -Maximum ($MaximumDate.AddSeconds(-1)).Ticks

此代码有效:

$Ticks = Get-Random -Minimum $CreationDate.Ticks -Maximum ($MaximumDate.AddSeconds(-1)).Ticks
[datetime]$ModificationDate = $Ticks

但是,如果您将该工作代码放在 if/else 语句中,它会再次失败:

if(any condition you like){
    $Ticks = Get-Random -Minimum $CreationDate.Ticks -Maximum ($MaximumDate.AddSeconds(-1)).Ticks
    [datetime]$ModificationDate = $Ticks
}
else{
    $Ticks = Get-Random -Minimum $MinimumDate.Ticks -Maximum $CreationDate.Ticks
    [datetime]$ModificationDate = $Ticks
}

VSCode 似乎不喜欢 Get-Random 并认为它是恶意的。该代码在 Powershell 中运行,但在从 VSCode 运行时被阻止。有谁知道发生了什么?

编辑:为了澄清起见,我正在使用本地管理员、域管理员的用户运行代码,并以管理员身份运行 PS 和 VSCode,Get-ExecutionPolicy 显示“绕过”,因此它不应该是权限问题。

标签: powershellvisual-studio-code

解决方案


已解决:Windows 更新。

正如怀疑的那样,Evotec 链接中的解决方案似乎是罪魁祸首。在最近的 Windows 更新之后,随机化日期时间并将其分配给变量不再触发“恶意代码”错误。


推荐阅读