[英]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);
其中sTest
和sModulesPath
是参数。
不确定这是否是你要问的,但请尝试在$ test字符串上使用双引号:
$ test =“这是一个文本,我想在我的c#LogWriter类中扩展$ ModulesPath”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.