我们有一个应用程序将数据转储为CSV,然后由其他脚本使用。在应用程序的上一次迭代中,其中一列是“user_name”并包含用户标识。这仍然存在,但它现在将“_company”附加到用户标识,所以不是用户标识“tim”,而是列中的“tim_company”。我们正在考虑剥离公司,我认为最好的办法是将一些VB嵌入到现有的脚本中,就像本站建议的那样:http://www.out-web.net/?p=130。将VBS嵌入到PowerShell中
这就是我试图添加:
function Load-VbsCode{
param(
$Code = $(throw "No VBS code specified.")
)
# Convert an array of multiple text lines to a string
$vbsCode = [string]::Join("`n", $Code)
$vbs = New-Object -ComObject 'MSScriptControl.ScriptControl'
$vbs.Language = "VBScript"
$vbs.AddCode($vbsCode)
$vbs.CodeObject
}
# pass the entire vbs file to Load-VbsCode
$vbs = Load-VbsCode $(Get-Content .\ReplaceData.vbs)
# Ready to use the Removenavient function
$c = $vbs.RemoveData
该.vbs只是删除/替换数据如下所示:
Function Removedata
Const FromValue = "_company"
Const ToValue = ""
Dim objExcel : Set objExcel = CreateObject("Excel.Application")
'objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Open("D:\Location\JunkData.csv")
Dim objWorksheet : Set objWorksheet = objWorkbook.Worksheets(1)
'Dim objRange : Set objRange = objWorksheet.UsedRange
objWorksheet.Cells.Replace FromValue, ToValue
objExcel.DisplayAlerts = False
objExcel.Save
objExcel.Quit
End Function
我得到这个错误:
New-Object : Retrieving the COM class factory for component with CLSID
{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} failed due to the following error:
80040154.
At D:\Location\Remove__company_from_CSV.ps1:11 char:22
+ $vbs = New-Object <<<< -ComObject 'MSScriptControl.ScriptControl'
+ CategoryInfo : ResourceUnavailable: (:) [New-Object], COMException
+ FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand
Property 'Language' cannot be found on this object; make sure it exists and
is settable.
At D:\Location\Remove__company_from_CSV.ps1:12 char:10
+ $vbs. <<<< Language = "VBScript"
+ CategoryInfo : InvalidOperation: (Language:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
You cannot call a method on a null-valued expression.
At D:\Location\Remove__company_from_CSV.ps1:13 char:17
+ $vbs.AddCode <<<< ($vbsCode)
+ CategoryInfo : InvalidOperation: (AddCode:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
我不知道VB,我不知道如何在PS中调用VBScript。我读过这可能是一个缺少的DLL,但我更可能相信我没有调用我应该打电话的东西。有任何想法吗?
我认为这会更有意义,只是在PowerShell中做到这一点?下面是一个链接,向您展示如何在文本文件上进行查找和替换:http://blogs.technet。COM/B/heyscriptingguy /存档/ 2008/01/17 /何灿我使用 - 窗口PowerShell的更换的字符-IN-A-文本file.aspx –
使用VB是technicaly可行的,但它是真的不是一个好主意。 – JPBlanc
谢谢。我会立即研究这个,所以我最大限度地减少了我在生活中浪费多少时间。 – Nate