小编Knu*_*ger的帖子

从Powershell脚本运行BAT文件的最安全方法

我无法获得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 batch-file

68
推荐指数
4
解决办法
21万
查看次数

通过Powershell十六进制编辑二进制文件的方法

我试图仅使用powershell从命令行执行二进制十六进制编辑.使用此剪辑执行十六进制替换已取得部分成功.当123456多次出现并且替换只发生在特定位置时,问题会出现.

注意:剪辑需要此处的功能Convert-ByteArrayToHexStringConvert-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命令.

binary powershell hex patch powershell-2.0

9
推荐指数
1
解决办法
9805
查看次数

Powershell在控制台和文件中显示消息

不确定这是一个简单的问题,还是需要一些代码来实现这一目标,所以在这里.

我有一个脚本,基本上在PS控制台日志文件中显示一些文本.

我的代码使用了写主机和写输出,所以我的问题是,如果2可以以某种方式组合?我只想记录特定的消息,所以做PS转录本将无法正常工作.

Write-host "Error: whatever message" 
Write-Output "Error: whatever message" | Out-File -Append $Log_file
Run Code Online (Sandbox Code Playgroud)

提前致谢!

powershell powershell-3.0 powershell-4.0

5
推荐指数
2
解决办法
3590
查看次数

确定脚本是否隐藏运行

我正在尝试以编程方式确定 .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 反对什么字段吗???

powershell wmi powershell-2.0 powershell-3.0 powershell-4.0

4
推荐指数
1
解决办法
5391
查看次数

以编程方式打开Windows 7"映射网络驱动器"对话框

我正在尝试打开可通过Windows 7上的"计算机>映射网络驱动器"手动访问的对话框.是否有任何编程方式可以直接打开它,例如使用VBScript或PowerShell命令(而不是通过触发鼠标或键盘事件)?我知道net use ...shell命令,但我特别想显示该对话框.

windows vbscript powershell cmd batch-file

3
推荐指数
1
解决办法
1045
查看次数

Powershell Add-Type在编译.dll时禁止创建.pdb(C#)

我正在创建一个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)

c# dll powershell powershell-2.0 pdb-files

1
推荐指数
1
解决办法
1202
查看次数