使用Powershell在Linux发行版中获取文件名和文件扩展名

时间:2019-05-10 13:53:40

标签: linux powershell

我在CentOS上使用以下脚本来获取文件扩展名和文件名,而没有扩展名和完整文件名,并且在Windows上运行良好,但是当我在ubuntu上使用它时却无法正常工作,并且显示了很多错误:

  

方法调用失败,因为[System.IO.DirectoryInfo]不包含     方法名为“ LastIndexOf”。

     

方法调用失败,因为[System.IO.DirectoryInfo]不包含名为'Substring'的方法。

下面您可以找到我编写的代码

$files = get-childitem /etc/ssl/certs
foreach ($file in $Files)
{ 
# Nom du fichier avec extension
$pos_last_anti_slash = $file.LastIndexOf("\")
$fullname = $files.Substring($pos_last_anti_slash+1)
# Extension du fichier
$pos_last_point = $file.LastIndexOf(".")
$extension = $file.Substring($pos_last_point+1)
Write-Host $extension

# Nom du fichier sans extension
$filename = $file.Substring($pos_last_anti_slash+1)
$pos_last_points = $filename.LastIndexOf(".")
$filename = $filename.Substring(0,  $pos_last_points)
Write-Host $filename
if($filextension == "p7b")
{
openssl x509 -inform p7b -in /etc/ssl/certs/$fullname -out 
/etc/ssl/certs/$filename.pem
$var = ((& openssl x509 -in $file -dates -noout) -match 'notAfter')

}
}

1 个答案:

答案 0 :(得分:0)

使用Get-Member cmdlet查看文件对象具有的字段。我认为可能会对FullName,BaseName,Extension和Name感兴趣。

Get-ChildItem -File -Path '/etc/ssl/certs' | Get-Member

我尚未对此进行测试,但它可能与您要寻找的接近。我确实将==替换为-eq

$certsdir = '/etc/ssl/certs'
$files = Get-ChildItem -File -Path $certsdir
foreach ($file in $files) { 
    # Nom du fichier avec extension
    $fullname = $_.Name

    # Extension du fichier
    $extension = $_.Extension
    Write-Host $extension

    # Nom du fichier sans extension
    $filename = $_.BaseName
    Write-Host $filename

    if ($filextension -eq ".p7b") {
        openssl x509 -inform p7b -in $_.FullName -out $(Join-Path -Path $certsdir -ChildPath "$filename.pem")
        $var = ((& openssl x509 -in $file -dates -noout) -match 'notAfter')
    }
}