windows - Powershell Script udsender ikke data i File uden for ISE

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forstår, at andre mennesker har haft lignende spørgsmål, men ingen er som denne. Jeg lavede et ps1 script til at konvertere en fil af XML-objekter til en CSV-fil med rækker, der repræsenterer nogle af disse data. I går aftes kunne jeg køre batchfilen og konvertere filer, men i morges sparer den en tom CSV-fil, når jeg kører fra batch, men det fungerer fint, når jeg kører det i Powershell ISE.


Jeg kører det fra en batch-fil med -STA-tilstand for at gøre det muligt at åbne dialogvinduerne:


powershell -sta C:Users*******DownloadsJiraXMLtoCSV.ps1


Og her er scriptet (det var svært at gøre denne kodeblok lol undskyld '}'):


    # This function will open a file-picker for the user to select their Jira XML Export
    Function Get-JiraXMLFile(){ 
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null;
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog;
$OpenFileDialog.initialDirectory = Get-Location;
$OpenFileDialog.filter = "XML files (*.xml)|*.xml";
$OpenFileDialog.ShowDialog() | Out-Null;
$OpenFileDialog.filename;
$OpenFileDialog.ShowHelp = $true;
}

    # This function will open the file save dialong to allow the user to choose location and name of the converted XML-to-CSV file
    Function Get-SaveFile(){ 
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null;

$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog;
$SaveFileDialog.initialDirectory = Get-Location;
$SaveFileDialog.filter = "CSV files (*.csv)|*.csv";
$SaveFileDialog.ShowDialog() | Out-Null;
$SaveFileDialog.filename;
$SaveFileDialog.ShowHelp = $true;
} 




    # Invoke the file-picker function and obtain input file 
    $inputFile = Get-JiraXMLFile;

    #initialize list for items that will be extracted from XML Input File
    $list = @(); 

    # Loop through all the items in Jira XML export file
    foreach ( $item in $XMLFile.rss.channel.item ) {

# Create a new hash object
$issue = @{}; 

# Gather wanted attributes
$issue.Key = $item.key.InnerXML;
$issue.StatusColor = $item.statusCategory.colorName;
$issue.Status = $item.status.InnerXML;

# Check for comments 
if ( $item.comments ) {
    # Record the comments with column name/header format as follows: comment #0 | comment #2|...
    # Change this value to 1 if you want to see it start at comment #1 instead of comment #0
    $incrementalCounter = 0;
    # Loop through all comments on the issue
    foreach ( $comment in $item.comments.comment ) {
        $issue.("comment #"+$incrementalCounter) = $comment.InnerXML;
        $incrementalCounter += 1;
    }

}
#Create an object to be added to the list
$object = New-Object –TypeName PSObject –Prop $issue;
Write-Output $object;

# add this issue to the list to convert/export to CSV
$list += $object;


}


# Open File Saving window to choose file name and location for the new
$OutputFile = Get-SaveFile;
$list | Export-Csv -Path ($OutputFile) -NoTypeInformation;


Og hvis du vil have nogle eksempler XML for at hjælpe mig med at lære, hvad jeg gør galt:


    <rss version="0.92">
    <channel>
    <title>XML Export</title>
    <link>...</link>
    <description>An XML representation of a search request</description>
    <language>en-us</language>
    <issue start="0" end="7" total="7"/>
    <build-info>...</build-info>
    <item>
    <title>[AJT-46] another new story</title>
    <project id="1652" key="AJT">Advanced Training</project>
    <description/>
    <environment/>
    <key id="220774">AJT-46</key>     
    <status id="16615" iconUrl="https://website.com/" description="Desc text">To Do</status>
    <statusCategory id="2" key="new" colorName="gray"/>
    <labels></labels>
    <created>Tue, 5 Jun 2018 11:25:38 -0400</created>
    <updated>Tue, 5 Jun 2018 11:29:00 -0400</updated>
    <due/>
    </item>
    </channel>
    </rss>


Det fungerede i går aftes, og nu virker det ikke, da jeg kom op i morges, så der ikke blev ændret noget, jeg ved, jeg heller ikke genstarter. Det virker stadig i Powershell ISE, hvilket er fint, men jeg har brug for batchfilmetoden til Den person, jeg gør det til. Enhver hjælp, rådgivning mv bliver værdsat! Tak

Bedste reference


Ændringer, jeg lavede, og det virker nu, dobbelt newline separeret:


# Invoke the file-picker function and obtain input file 
[Xml]$inputFile = Get-JiraXMLFile;


# Grab all the items we exported, ignore the header info
if ( $inputFile ) {
    #$XmlComments = Select-Xml "//comment()" -Xml $inputFile;
    #$inputFile.RemoveChild($XmlComments);
    $items = Select-Xml "//rss/channel/item" -Xml $inputFile;
}


# Iterate over items and grab important info to be put into CSV format
foreach ( $item in $items ){
# Create a new hash object
$issue = @{}; 


# Gather wanted attributes
if( $item.Node.key){
    $issue.Key = $item.Node.key.InnerXML;
}