首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不生成msbuild.exe进程的情况下从Powershell运行MSBuild?

在不生成msbuild.exe进程的情况下从Powershell运行MSBuild,可以使用以下方法:

  1. 使用MSBuild命令行参数

可以使用MSBuild命令行参数来指定不生成msbuild.exe进程。具体方法是在Powershell中使用以下命令:

代码语言:txt
复制
msbuild.exe /nologo /noconsolelogger /v:minimal /clp:NoSummary /p:BuildInParallel=true /p:BuildProjectReferences=false /p:Configuration=Release /p:Platform=x64 /p:OutputPath=bin\x64\Release\ /p:ErrorReport=none /p:WarningsNotAsErrors=MSB4011 Solution.sln

其中,/nologo /noconsolelogger /v:minimal /clp:NoSummary 参数可以减少MSBuild的输出信息,/p:BuildInParallel=true /p:BuildProjectReferences=false 参数可以启用并行构建,/p:Configuration=Release /p:Platform=x64 /p:OutputPath=bin\x64\Release\ 参数可以指定构建的配置和平台,/p:ErrorReport=none /p:WarningsNotAsErrors=MSB4011 参数可以控制错误报告和警告行为。

  1. 使用MSBuild API

可以使用MSBuild API来在Powershell中运行MSBuild,以下是一个示例代码:

代码语言:powershell
复制
Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

$projectFile = 'Path\To\Project.csproj'
$buildParameters = New-Object 'Microsoft.Build.Execution.BuildParameters'
$buildParameters.Loggers = New-Object 'System.Collections.Generic.List[Microsoft.Build.Framework.ILogger]'
$buildParameters.Loggers.Add((New-Object 'Microsoft.Build.Logging.ConsoleLogger'))
$buildRequest = New-Object 'Microsoft.Build.Execution.BuildRequestData' -ArgumentList $projectFile, $null, '4.0', $null, $null, New-Object 'System.Collections.Generic.Dictionary[string,string]'
$buildRequest.GlobalProperties.Add('Configuration', 'Release')
$buildRequest.GlobalProperties.Add('Platform', 'x64')
$buildRequest.GlobalProperties.Add('OutputPath', 'bin\x64\Release\')
$buildRequest.GlobalProperties.Add('ErrorReport', 'none')
$buildRequest.GlobalProperties.Add('WarningsNotAsErrors', 'MSB4011')
$buildResult = [Microsoft.Build.Execution.BuildManager]::DefaultBuildManager.Build($buildParameters, $buildRequest)

这个示例代码使用MSBuild API来创建一个BuildParameters对象和一个BuildRequestData对象,然后使用BuildManager类的Build方法来执行MSBuild构建。在这个示例中,我们设置了一些全局属性,例如Configuration、Platform、OutputPath、ErrorReport和WarningsNotAsErrors,以控制MSBuild的行为。

总之,在不生成msbuild.exe进程的情况下从Powershell运行MSBuild,可以使用MSBuild命令行参数或MSBuild API来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

进攻性横向移动

横向移动是从一个受感染的宿主移动到另一个宿主的过程。渗透测试人员和红队人员通常通过执行 powershell.exe 在远程主机上运行 base64 编码命令来完成此操作,这将返回一个信标。问题在于攻击性 PowerShell 不再是一个新概念,即使是中等成熟的商店也会检测到它并迅速关闭它,或者任何半体面的 AV 产品都会在运行恶意命令之前将其杀死。横向移动的困难在于具有良好的操作安全性 (OpSec),这意味着生成尽可能少的日志,或者生成看起来正常的日志,即隐藏在视线范围内以避免被发现。这篇博文的目的不仅是展示技术,但要显示幕后发生的事情以及与之相关的任何高级指标。我将在这篇文章中引用一些 Cobalt Strike 语法,因为它是我们主要用于 C2 的语法,但是 Cobalt Strike 的内置横向移动技术是相当嘈杂,对 OpSec 不太友好。另外,我知道不是每个人都有 Cobalt Strike,所以在大多数示例中也引用了 Meterpreter,但这些技术是通用的。

01
  • 领券