我有一个headscratcher,我有一个powershell脚本引用另一个。在这个脚本的顶部,我有参考,
. $PSScriptRoot\bin\functions.ps1
这会引发错误,
方法调用失败,因为[System.IO.DirectoryInfo]不包含名为“op_Addition”的方法。 在.... \ bin \ functions.ps1:5 char:1 + $ LogPath = $ ParentDirectory +'\ InstallLog_'+ $ CurrentDate +'。txt' + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(op_Addition:String)[],RuntimeException + FullyQualifiedErrorId:MethodNotFound
我无法弄清楚为什么会这样。这是第二个文件的前5行中的代码。问题在于$ Logs赋值。
$invocation = (Get-Variable MyInvocation).Value
$CurrentDate = Get-Date -format "yyyy_MM_dd_hhmmss"
$CurrentDirectory = Split-Path $invocation.MyCommand.Path
$ParentDirectory = (get-item $CurrentDirectory).parent
$LogPath = $ParentDirectory + '\InstallLog_' + $CurrentDate + '.txt'
如果我在$ Logs变量中硬编码路径,那很好。 如果我使用变量$ CurrentDirectory而不是$ ParentDirectory,那就好了。
如果使用$ ParentDirectory失败或使用$ Logs行中的语句。我不认为我所做的事情很复杂,也没有别人没做过的事情。是否有一些我不知道的细微差别?
谢谢,
答案 0 :(得分:1)
我在发布之后发现,当你使用get-item时,你没有得到一个字符串,你得到一个对象。
错误被抛出,因为我试图将一个对象与另一个字符串连接起来。我需要使用以下内容,
$ParentDirectory = (get-item $PSScriptRoot).parent
$LogPath = $ParentDirectory.FullName + '\logs\InstallLog_' + $CurrentDate + '.txt'