我无法获得PowerShell脚本直接执行bat文件.例如,这适用于命令行:
.\\my-app\my-fle.bat
Run Code Online (Sandbox Code Playgroud)
当我将此命令添加到脚本时,它输出:
The term '.\\my-app\my-file.bat' is not recognized as the
name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下结果,结果相同:
& .\\my-app\my-fle.bat
& ".\\my-app\my-fle.bat"
\my-app\my-fle.bat
& \my-app\my-fle.bat
& "\my-app\my-fle.bat"
Run Code Online (Sandbox Code Playgroud)
注意:必须返回lastexitcode,因为我需要验证批处理是否成功.
我试图仅使用powershell从命令行执行二进制十六进制编辑.使用此剪辑执行十六进制替换已取得部分成功.当123456多次出现并且替换只发生在特定位置时,问题会出现.
注意:剪辑需要此处的功能Convert-ByteArrayToHexString
和Convert-HexStringToByteArray
功能.
http://www.sans.org/windows-security/2010/02/11/powershell-byte-array-hex-convert
$readin = [System.IO.File]::ReadAllBytes("C:\OldFile.exe");
$hx = Convert-ByteArrayToHexString $readin -width 40 -delimiter "";
$hx = $hx -replace "123456","FFFFFF";
$hx = "0x" + $hx;
$writeout = Convert-HexStringToByteArray $hx;
set-content -value $writeout -encoding byte -path "C:\NewFile.exe";
Run Code Online (Sandbox Code Playgroud)
我们如何在powershell中指定偏移位置来替换这个粗略的-replace命令.
不确定这是一个简单的问题,还是需要一些代码来实现这一目标,所以在这里.
我有一个脚本,基本上在PS控制台和日志文件中显示一些文本.
我的代码使用了写主机和写输出,所以我的问题是,如果2可以以某种方式组合?我只想记录特定的消息,所以做PS转录本将无法正常工作.
Write-host "Error: whatever message"
Write-Output "Error: whatever message" | Out-File -Append $Log_file
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我正在尝试以编程方式确定 .ps1 脚本是否正在运行。如果它正在明显运行,它应该隐藏地重新启动。如果它已经隐藏,则不采取任何操作。
我遇到的问题是一个循环,它不断地自行重新启动,因为无法确定隐藏状态。
我一直在查看 get-process cmdlet 和 GWMI Win32_process,但没有看到类似于 .visible 属性来检查状态的内容。
If ($me -eq visible ???)
{
$Invisible = New-Object System.Diagnostics.ProcessStartInfo
$Invisible.FileName = "PowerShell.exe"
$Invisible.windowStyle ="Hidden"
$Invisible.arguments = "$myInvocation.MyCommand.Definition"
$Invisible.Verb = 'runas'
[System.Diagnostics.Process]::Start($Invisible)
}
Run Code Online (Sandbox Code Playgroud)
知道我可以 If -eq 反对什么字段吗???
我正在尝试打开可通过Windows 7上的"计算机>映射网络驱动器"手动访问的对话框.是否有任何编程方式可以直接打开它,例如使用VBScript或PowerShell命令(而不是通过触发鼠标或键盘事件)?我知道net use ...
shell命令,但我特别想显示该对话框.
我正在创建一个C#hello world DLL并使用内置的PowerShell Add-Type命令对其进行编译.执行此操作时,它会在.dll目录中创建一个不需要的.pdb调试文件.
使用Add-Type命令时,如何禁止创建此.pdb文件.我知道在Visual Studio中我们可以通过一个选项禁用它,但似乎找不到合适的cmd行语法.
这是示例PowerShell代码.从控制台运行,它将在C:\上创建DLL以及.pdb
Clear-Host
Add-Type -OutputAssembly C:\Knuckle.dll @"
using System;
namespace Knuckle
{
public class Dragger
{
public static void Main()
{
Console.WriteLine("Knuckle-Dragger was Here!");
}
}
}
"@
[Void][Reflection.Assembly]::LoadFile("C:\Knuckle.dll")
[Knuckle.Dragger]::Main()
Run Code Online (Sandbox Code Playgroud)
结果
PS C:\Users\Knuckle-Dragger> [Knuckle.Dragger]::Main()
Knuckle-Dragger was Here!
Run Code Online (Sandbox Code Playgroud)