PowerShell 中的隐写术代码无法正常工作

Steganography Code in PowerShell is not working correctly

提问人:Stefanie Goodin 提问时间:10/10/2023 最后编辑:Stefanie Goodin 更新时间:10/10/2023 访问量:70

问:

在我的 IT 课程中,我们目前正在研究隐写术,我得到了我正在使用的 PowerShell 的这段代码,用于在图像中隐藏消息。代码有效,但我们的说明说要删除一个部分,因为它是不必要的。但是,如果我按照指示删除此部分,则代码的运行方式会有所不同,但随后告诉我命令存在语法错误,并且没有将消息写入图像。这是我们正在使用的代码

function Hide-Msg {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
        [string]$Path,

        [Parameter(Mandatory = $False)]
        [string]$Message
    )

    # Prompt the user for the message if not provided as an argument
    if (-not $Message) {
        $Message = Read-Host "Enter the message to hide"
    }

    # Prompt the user for confirmation before proceeding
    $confirmation = Read-Host "Are you sure you want to hide the message in '$Path'? (Y/N)"
    if ($confirmation -ne "Y") {
        Write-Host "Operation canceled."
        return
    }

    echo "`n`n $Message" > $Env:USERPROFILE\Desktop\foo.txt

    cmd.exe /c copy /b "$Path" + "$Env:USERPROFILE\Desktop\foo.txt" "$Path"

    rm $Env:USERPROFILE\Desktop\foo.txt -r -Force -ErrorAction SilentlyContinue
}

# Example usage:
# Hide-Msg -Path "C:\example.txt" -Message "This is a hidden message"

**我们应该去掉的部分是这个**

param (
    [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
    [string]$Path,

    [Parameter(Mandatory = $False)]
    [string]$Message
)

但是首先 [CmdletBinding()] 给了我一个错误,所以我删除了 (),但这导致我遇到了一个问题,它确实提示我并要求我输入我想写的消息并要求确认,但最终在它写之前给了我语法错误。如何在不完全更改代码的情况下解决此问题?

我添加了

param (
        [string]$Path,
        [string]$Message
    )
    

定义参数,但这基本上让我回到了原点,并回到了与“不必要”代码片段相同的代码运行。根据说明,它应该以不同的方式运行并将消息写入映像。

PowerShell 语法 错误 隐写术

评论

0赞 Abraham Zinala 10/10/2023
删除参数声明后,将无法再提供路径($path的值),也无法在其他任何位置静态声明该路径以正确引用该路径。我能看到的最后一个问题是 的连接和你的路径。它应该包装在分组表达式中,以便可以首先由 PowerShell 解释,然后作为单个值传递给 。否则,它将被读取为同一命令的所有部分,因此每个参数(包括串联)都被读取为要传递到执行的单独令牌。$pathfoo.txtcmd.execmd.exe
1赞 mclayton 10/10/2023
顺便说一句,你可能想阅读一下 PSScriptAnalyzer - 它是 PowerShell 的 linting 工具,可帮助你编写更易于维护的代码。例如,某些规则可能是个人偏好问题,但它会标记 AvoidUsingCmdletAliases 规则,供你使用 和。如果您使用 VSCode 等 IDE 来编写脚本,它将在您键入时自动显示这些警告...echorm
1赞 mklement0 10/10/2023
您能详细说明为什么应该删除代码的指定部分吗?目标是什么?@AbrahamZinala,很好,但请注意,在这种情况下,实际上是用于的命令,将两个文件复制到一个目标文件中(这是隐写术部分)。+cmd.execopy
1赞 Abraham Zinala 10/10/2023
@mklement0,谢谢。这是我很好奇的事情,并认为迟早会有人纠正我
0赞 Stefanie Goodin 10/11/2023
我会检查一下这个工具。这听起来像是一个非常有用的工具。@mklement0 我正在上课的课程是初学者的 IT 课程,本周的主题是我们的说明中的隐写术,它说在我们使用生成式 AI 将用户提示添加到我们的代码中之后。这段代码现在是一段不必要的代码,我们应该删除它。但我觉得事实并非如此,它确实是需要的,否则它就无法正常运行。

答: 暂无答案