繁体   English   中英

从Powershell调用的c#中的StringExpansion

[英]StringExpansion in c# called from Powershell

我有一个小的c#类,它做一些日志记录的东西,并且使用以下命令从powershell脚本框架调用:

[System.Reflection.Assembly]::LoadFrom("$ExtensionsPath\LogWriter.dll") 
$Log = New-Object LogWriter($LogFile, $addTimeStamp, $logLevel, $overWrite)

写入日志文件是这样的

$Log.AddInfo("myText")

到目前为止工作正常。

我想了一段时间,如果我能在我的LogWriter类的AddInfo()方法中使用stringexpansion?

看看这个例子:

$ModulesPath = ‘C:\temp\modules’
$test = ‘This is a text and I want to expand $ModulesPath in my c# LogWriter class’
$Log.AddInfo($test)

现在,c#类将在powershell中扩展$ test中的$ modulespath。 我已经知道在c#中我可以访问使用System.Management.Automation命名空间从中调用c#类的powershell运行空间。 但后来我迷失了如何真正扩展变量。

写入日志文件的条目应如下所示:

这是一个文本,我想在我的c#LogWriter类中扩展C:\\ temp \\ modules

当然我知道我可以在我的脚本中使用

$Log.AddInfo(($ExecutionContext.InvokeCommand.ExpandString($test)))

但这很糟糕,因为它看起来很难看,如果我忘记添加这个声明,就不会进行扩展。

所以我想在我的c#类中检索当前的Runspace并在那里执行ExpandString-Command来获取扩展变量但是我失败了。 这是我所不知道的。

在这里有人告诉我这是否可能? 我已经想到了其他一些使用它的任务,所以请不要就这是否有意义展开一场火焰战争。

RGDS

一月

如何在脚本之外知道$ModulesPath的值? 如果你想在C#中扩展它,那么你必须发送它,可能作为AddInfo的第二个参数,如:

$Log.AddInfo($test, $ModulesPath)

现在它已知并且可以通过以下方式完成替换:

string sNew = sTest.Replace("$ModulesPath", sModulesPath);

其中sTestsModulesPath是参数。

不确定这是否是你要问的,但请尝试在$ test字符串上使用双引号:

$ test =“这是一个文本,我想在我的c#LogWriter类中扩展$ ModulesPath”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM