String 使用Powershell删除两个字符之间字符串中的文本

String 使用Powershell删除两个字符之间字符串中的文本,string,powershell,csv,text,replace,String,Powershell,Csv,Text,Replace,我有一个powershell脚本,可以运行和收集信息,并将其放入.csv文件中。信息示例如下所示,每行以唯一的服务器名称开头,后跟一个随机唯一标识符,包含一对() 我还有第二个powershell脚本,它运行并获取这个.csv文件及其信息,并将其格式化为具有标题和适当间距的报告 有人能帮我删除()和()之间的文本吗 我希望每行的条目如下所示: "GDR01W01SQ004","1","4","63","NY-TER-PLN-P-5N" 提前非常感谢 这是我一直在使用的脚本 ##########

我有一个powershell脚本,可以运行和收集信息,并将其放入.csv文件中。信息示例如下所示,每行以唯一的服务器名称开头,后跟一个随机唯一标识符,包含一对()

我还有第二个powershell脚本,它运行并获取这个.csv文件及其信息,并将其格式化为具有标题和适当间距的报告

有人能帮我删除()和()之间的文本吗

我希望每行的条目如下所示:

"GDR01W01SQ004","1","4","63","NY-TER-PLN-P-5N"
提前非常感谢

这是我一直在使用的脚本

####################PowerCLI Check####################

# Verify whether the PowerCLI module is loaded, if not load it.
if ( (Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null )
{
    Add-PsSnapin VMware.VimAutomation.Core -ErrorAction Stop
}




################### Run Time Section ####################
#This script should be run from a server that has DNS records for all entries in vcenters.txt
$file = get-Content c:\reports\vcenter\vcenters.txt  

foreach ( $server in $file) { 
Connect-VIserver -Server $server

Get-VM | select Name, NumCpu, MemoryGB, ProvisionedSpaceGB, Notes | Out-Null

} 


# Command for Custom Annotations.
Get-VM | select Name, NumCpu, MemoryGB, ProvisionedSpaceGB, Notes -expandproperty customfields  | Export-Csv -path “c:\reports\vcenter\vcenall.csv” -NoTypeInformation

# Takes vcenall.csv and sorts only the Name and Notes columns and selects all but the custom fields. Capacity Reporting script caprep.ps1 runs against this csv.
Import-csv c:\reports\vcenter\vcenall.csv | Sort-Object Notes, Name | Select-Object Name, NumCpu, MemoryGB, ProvisionedSpaceGB, Notes |Export-csv capacity.csv -NoTypeInformation

#Used to remove domain from server name
(Get-Content capacity.csv) | ForEach-Object { $_ -replace ".domain.local", "" } | Set-Content capacity.csv


# Takes vcenall.csv and sorts only the Notes column and selects only the Name and Notes columns. Nimsoft comparison script nimcomp.ps1 runs against this csv.
Import-csv c:\reports\vcenter\vcenall.csv | Sort-Object Notes | Select-Object Name, Notes | Export-csv nimsoft.csv -NoTypeInformation

# Takes vcenall.csv and sorts only the Name columns and exports all fields. Backup/Restore comparison script bure.ps1 runs against this csv.
Import-csv c:\reports\vcenter\vcenall.csv | Sort-Object Name | Export-csv bure.csv -NoTypeInformation

我认为您需要添加更多信息,但只需使用您所允许的方法来尝试这一方法

Import-Csv C:\temp\test.csv -Header server,1,2,3,4 | ForEach-Object{
    $_.server  = (($_.server).split("(")[0]).Trim()
    $_
} 
我们导入csv数据并分配一个标题。如果您已经有一个,那么可以忽略此参数

然后,我们将每一行数据作为一个对象进行检查。通过按空格分隔数据来更改
服务器
数据。如果此数据用于服务器名称,则可以安全地假定第一个空格之前的所有内容都是服务器名称。这种方法取决于存在的空间。我们也可以对
)使用相同的逻辑,但如果空间是一种保证,这将更容易

因此,我们更新
服务器
,然后使用
$\uu
将数据发送回管道

样本输出

server        1 2  3   4               
------        - -  -   -               
GDR01W01SQ004 1 4  63  NY-TER-PLN-P-5N 
GDR01L02D001  4 12 129 CO-FDP-STE-NP-5N
根据评论进行编辑


因为它是一个服务器显示名称,所以我将逻辑更改为基于“(”进行拆分。还使用了
split()
方法而不是
-split
操作符。

你能给我们看一下你的脚本吗?尽管我对powershell不太了解,所以我在黑暗中拍摄,但我相信正则表达式可以工作。下面是一个链接,展示了如何从一对()你可以在你的CSV数据中包含一个标题吗?@ JONS537很高兴它有帮助。我也更新了你的需求。检查更新。如果你觉得它是你的问题,也可以把它标记为答案。这很管用!非常感谢!!我改变了一点,因为我发现我有一个服务器显示名称有一个空格,所以我只是CH。首先(到了a;它完美地清理了一切:
(Get Content vcenall.csv)|%{$}-replace“(“,”;“}}| Set Content vcenall.csv
导入csv C:\reports\vcenter\vcenal.csv | ForEach Object{$$\ Name=($\ Name-split;”)[0]$}|导出csv vcenall.csv-NoTypeInformation
server        1 2  3   4               
------        - -  -   -               
GDR01W01SQ004 1 4  63  NY-TER-PLN-P-5N 
GDR01L02D001  4 12 129 CO-FDP-STE-NP-5N