小编For*_*ica的帖子

Powershell中的文本解析:识别目标行并解析接下来的X行以创建对象

我正在解析来自磁盘阵列的文本输出,该磁盘阵列以可预测的格式列出有关 LUN 快照的信息。在尝试了所有其他方法以可用的方式从数组中获取这些数据之后,我唯一能做的就是生成这个文本文件并解析它。输出如下所示:

SnapView logical unit name:  deleted_for_security_reasons
SnapView logical unit ID:  60:06:01:60:52:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Target Logical Unit:  291
State:  Inactive
Run Code Online (Sandbox Code Playgroud)

这在整个文件中重复,每组之间有一个换行符。我想确定一个组,解析四行中的每一行,创建一个新的 PSObject,将每行的值添加为新的 NoteProperty,然后将新对象添加到集合中。

我能想到的是,一旦我确定了四行块中的第一行,那么如何处理第二行、第三行和第四行中的文本。我遍历每一行,找到一个块的开始,然后处理它。到目前为止,这是我所拥有的,并附有魔法所在的评论:

$snaps = get-content C:\powershell\snaplist.txt
$snapObjects = @()

foreach ($line in $snaps)
    {

        if ([regex]::ismatch($line,"SnapView logical unit name"))
        {
            $snapObject = new-object system.Management.Automation.PSObject
            $snapObject | add-member -membertype noteproperty -name "SnapName" -value $line.replace("SnapView logical unit name:  ","")
            #Go to the next line and add the UID
            #Go to the next line and add the TLU
            #Go to the next …
Run Code Online (Sandbox Code Playgroud)

powershell parsing

2
推荐指数
1
解决办法
2万
查看次数

从Powershell插入的SQL:将空值插入为"空白"

我正在从Powershell脚本中将行插入表中.我遍历PSObjects("属性包")的集合,并为每个插入一行.PSObject上的每个noteProperty对应于表中的一列.其中大多数是字符串,少数是日期,还有一些是布尔.

但是,Powershell中具有$ null值的属性将作为"空"字符串插入,而不是表中的NULL.$ null日期值显示为1900-01-01.除了指定了NOT NULL的几列之外,该表没有任何约束.如果我使用NULL作为值进行手动插入,它可以正常工作.

我可以循环遍历每个对象,寻找$ null属性,然后用字符串NULL替换它,但这似乎是一种黑客而不是"正确"的方式.正如你在下面看到的那样,我已经为booleans做了这个,因为表中相应的列是位.我错误地认为Powershell中的$ null会在SQL中转换为NULL.如果属性在Powershell中的值为$ null,是否有另一种方法可以使它正确地将NULL插入表中?或者,在插入最佳方法之前将$ null转换为字符串"NULL"?

这是我正在使用的代码:

$listOfLunsReport = Import-Clixml e:\powershell\myObjectCollection.xml

$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Data Source=SQLSERVER\MYDATABASE;Initial Catalog=my_report;Integrated Security=SSPI;"
$conn.open()

$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.connection = $conn

foreach ($lunObject in $listOfLunsReport)
{
    if ($lunObject.SnapsConfigured -eq $true)
    {
        $snapBit = 1
    }
    else
    {
        $snapBit = 0
    }
    if ($lunObject.isDatastore -eq $true)
    {
        $dsBit = 1
    }
    else
    {
        $dsBit = 0
    }
    $cmd.commandtext = "INSERT INTO listOfLuns (Array,lunNumber,LunUID,CapacityInMB,StorageGroup,`
    SnapsConfigured,SnapName,SnapUID,NumberOfSnaps,LatestSnap,VM,PhysicalServer,isDatastore,`
    DatastoreName,ReportDate,ArrayModel,ArrayLocation) VALUES ('{0}','{1}','{2}','{3}','{4}',`
    '{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}')" -f …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

powershell ×2

parsing ×1

sql-server ×1