Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PowerShell上使用获取内容时使用变量as-path_Powershell - Fatal编程技术网

在PowerShell上使用获取内容时使用变量as-path

在PowerShell上使用获取内容时使用变量as-path,powershell,Powershell,我试图通过使用get content获取文本文件的内容,我希望-path的值位于如下所示的变量上: $MyFileName = "testfile" $MyFilePath = "(.\MyFolder\" + $MyFileName + ".txt)" $ServerList = Get-Content -Path $MyFilePath 但我一直在犯错误: Cannot bind argument to parameter 'Path' because it is null. 如

我试图通过使用get content获取文本文件的内容,我希望-path的值位于如下所示的变量上:

$MyFileName = "testfile"    
$MyFilePath = "(.\MyFolder\" + $MyFileName + ".txt)"
$ServerList = Get-Content -Path $MyFilePath
但我一直在犯错误:

Cannot bind argument to parameter 'Path' because it is null.
如果我硬编码文件路径,它就会工作

$ServerList = Get-Content -Path (.\MyFolder\MyFile.txt)

Write-Host $MyFilePath
.\MyFolder\testfile.txt

尝试设置完整的文件路径,如

$MyFilePath = "C:\My Folder\My File.txt"
或者,如果你知道相对路径是你想要的,移除括号

$MyFilePath = ".\My Folder\My File.txt"

这里有一种方法可以做你想做的事。[grin]第一部分是您的代码,其中包含非常特殊的文件名。第二部分分为易于阅读/理解/修改的部分

$YourFileName = "testfile"    
$YourFilePath = "(.\MyFolder\" + $YourFileName + ".txt)"

$BaseName = 'testfile'
$Extension = 'txt'
$FileName = $FileName, $Extension -join '.'
$Directory = $env:TEMP
$FullFileName = Join-Path -Path $Directory -ChildPath $FileName

$YourFilePath
$FullFileName
输出

(.\MyFolder\testfile.txt)
C:\Temp\testfile.txt

请注意,代码生成的文件名几乎肯定是无效的。[grin]

如果查看变量,字符串中会有括号:

$MyFileName = "testfile"
$MyFilePath = "(.\MyFolder\" + $MyFileName + ".txt)"
$myfilepath

(.\MyFolder\testfile.txt)
这将有助于:

$MyFileName = "testfile"
$MyFilePath = ".\MyFolder\" + $MyFileName + ".txt"
$myfilepath

.\MyFolder\testfile.txt
你可以把括号放在外面,但你不需要。或

".\MyFolder\$MyFileName.txt"

我发现问题在于在工作流中使用变量。我太专注于这段代码了,以至于忘了看大局

我有以下出现问题的代码:

Workflow GetServerStatus{
   $ServerList = Get-Content -path $FullFileName
   $ServiceList = Get-Content service_list.txt
   ForEach -Parallel ($Server in $ServerList){
      InlineScript{
         Get-Service -ComputerName $Using:Server -name $Using:ServiceList
      }
   }
}

#credits to @Lee_Dailey
$Extension = 'txt'
$FileName = $BaseName, $Extension -join '.'
$Directory = '.\server'
$FullFileName = Join-Path -Path $Directory -ChildPath $FileName

GetServiceStatus
事实证明,问题在于我没有将变量正确地传递给工作流 应该是:

Workflow GetServiceStatus{
    param(
        $FullFileName
    )
然后就这样叫它

GetServiceStatus $FullFileName

试过了,我还是犯了同样的错误。我之所以编辑我的问题,是因为实际文件名本身就是一个变量,减去文件扩展名。txtry使用
Join Path
比如
$MyFilePath=Join Path-Path“C:\my Folder”-ChildPath$MyFileName
如果缺少文件类型,添加这一行
$MyFilePath+='.txt'
仍然一样,我甚至尝试了$MyFilePath=“C:\My Folder\{0}.txt“-f$MyFileName写入主机$MyFilePath时,我得到了正确的结果。问题是在Get content上使用$MyFilePath变量作为-Path选项时,
$MyFileName
到底是什么?
$MyFileName | Get Member
返回什么?TypeName:System.string除非文件确实包含括号,否则不要在文件名中使用括号
-Path
需要字符串或字符串数组。在您的情况下,这将是
-Path'.\MyFolder\MyFile.txt'
。请尝试删除它们,但仍然相同。除非您需要获取内容部分周围的参数,否则请删除它们。它们是不寻常的,因为它们分散了你问题中新改变的观点的注意力。如果您确实需要它们,请解释原因。我并不特别需要它们,我是powershell的新手,我基本上是从各种来源获得此代码的,我回家后会更新我的问题我认为问题源于我在工作流内使用get Content进行并行处理,当我将代码带到工作流外时,它工作得完美无缺。我以为问题就出在这段代码上,但我错了,我会更新我的问题。@Ruben_PH-ah!这改变了很多事情。只要你修复了严重损坏的文件名生成器代码,人们就可以关注其他方面。[咧嘴笑]