通过PS模块中的不同功能传递完整路径

时间:2014-04-15 20:04:26

标签: powershell powershell-v3.0 powershell-module

在Powershell中声明完整路径的最佳方法是什么?我正在编写一个需要通过多个psm1文件传递完整文件路径变量(例如:$ Backup = C:\ backups \ file1.bak)并远程调用的模块。

现在,我需要将一个完全限定的路径传递给Powershell并让它做很多不同的事情。当它全部在1个函数脚本中时似乎工作正常,否则,该路径实际上不会通过其他PSM1文件中编写的其他函数,但所有其他变量都可以。它似乎只输出一个空值。

首先,我有一个FileValidator脚本,除其他外,它将在路径中找到最新的文件名,然后使用路径连接最新的文件名。也许我需要在某处使用joinpath来解决这个问题。获取未导出到其他PSM1文件的完全限定路径的代码是:

Param: [string] $BackupPath, #= "Z:\backupsfldr\subfldr\"

$LatestSQLBackupDBFileName = Get-ChildItem $BackupPath | Where-Object{($_.LastWriteTime -gt "2014/02/01") -and ($_.Name -like "$DBname*.bak")} | Sort-Object LastWriteTime -Descending | Select-Object -First 1 | select -ExpandProperty name 

$FQNBackup = get-item($BackupPath + $LatestSQLBackupDBFileName)

正如你所看到的,我在不同的地方测试了$ FQNBackup的输出,但它让事情变得更糟。我不确定如何在模块中定义它或如何转换/转换它。在声明了上面列出的$ FQNBackup变量之后,我会通过尝试执行此操作来修改它,就像之前在stackoverflow上找到的那样:

$FQNBackup = [System.IO.Path]::GetFullPath($FQNBackup)

我也尝试将它转换为字符串,但我可能做错了。看起来我应该能够:

1-获取路径

2-转换为字符串

3-将值作为字符串传递     到其他模块。

然而,从架构设计角度来看,这是“坏”吗?我应该保持相同的对象类型,而不是从不同的psm跳转?这是真正的问题。

1 个答案:

答案 0 :(得分:1)

如果您需要构建一个包含2个字符串的路径,则通常使用Join-Path cmdlet,例如像这样:

PS C:\> Join-Path 'C:\some\folder' 'file.ext'
C:\some\folder\file.ext

但是,在处理现有文件时,您只需使用文件对象的FullName属性:

$FQNBackup = Get-ChildItem $BackupPath | Where-Object {
  $_.LastWriteTime -gt "2014/02/01" -and $_.Name -like "$DBname*.bak"
} | Sort-Object LastWriteTime -Descending | select -First 1 -Expand FullName 

字符串可以通过字符串参数传递给函数,例如像这样:

function Foo {
  [CmdletBinding()]
  Param(
    [Parameter(Mandatory=$true)]
    [string]$Bar
  )

  # do stuff
}

Foo -Bar 'some string'