提问人:Stefanie Goodin 提问时间:10/10/2023 最后编辑:Stefanie Goodin 更新时间:10/10/2023 访问量:70
PowerShell 中的隐写术代码无法正常工作
Steganography Code in PowerShell is not working correctly
问:
在我的 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
)
定义参数,但这基本上让我回到了原点,并回到了与“不必要”代码片段相同的代码运行。根据说明,它应该以不同的方式运行并将消息写入映像。
答: 暂无答案
评论
$path
的值),也无法在其他任何位置静态声明该路径以正确引用该路径。我能看到的最后一个问题是 的连接和你的路径。它应该包装在分组表达式中,以便可以首先由 PowerShell 解释,然后作为单个值传递给 。否则,它将被读取为同一命令的所有部分,因此每个参数(包括串联)都被读取为要传递到执行的单独令牌。$path
foo.txt
cmd.exe
cmd.exe
AvoidUsingCmdletAliases
规则,供你使用 和。如果您使用 VSCode 等 IDE 来编写脚本,它将在您键入时自动显示这些警告...echo
rm
+
cmd.exe
copy