Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

vm11

Same problem

#Load the .NET assembly for WinSCP
Add-Type -Path "C:\Program Files (x86)\WinSCP Automation\WinSCPnet.dll"
 
#Import the CSV containing switch details and store it in a variable
$switches = Import-Csv -Path "C:\Network Switch Backup\switches.csv"
 
#Get the current system date in the format year/month/date which will be used to name the backup files
$date = Get-Date -Format yyyy-M-d
 
#Loop over the lines in the CSV
Foreach ($line in $switches) {
 
    #Define the folder to store the output in and create it if it does not exist (if the folder exists already this will generate a non-blocking error)
    $outputfolder = "C:\Network Switch Backup\Backups\" + $line.hostname + "\"
    New-Item $outputfolder -ItemType Directory
 
    #Define the path to store the result of the download
    $outputpath = $outputfolder + $date
 
    #Store the session details
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = $line.hostname
        UserName = $line.username
        Password = $line.password
        SshHostKeyFingerprint = $line.sshhostfingerprint
    }
 
    $session = New-Object WinSCP.Session
 
    #Connect to the host
    $session.Open($sessionOptions)
 
    #Define the transfer options
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
 
    #Download the startup-config (the result of the last 'write memory' from the switches CLI) and save it to the outputpath
    $transferResult = $session.GetFiles("/cfg/startup-config", $outputpath, $False, $transferOptions)
 
    #Disconnect from the server
    $session.Dispose()
}

Here is/are the error(s):
New-Object : Der angegebene Wert ist ungültig, oder die Eigenschaft ist schreibgeschützt. Ändern Sie den Wert, und wiederholen Sie den Vorgang.

In C:\Network Switch Backup\Backup Network Switches.ps1:26 Zeichen:19
+ $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [New-Object], Exception
    + FullyQualifiedErrorId : SetValueException,Microsoft.PowerShell.Commands.NewObjectCommand
 
Ausnahme beim Aufrufen von "Open" mit 1 Argument(en):  "Der Wert darf nicht NULL sein.
Parametername: sessionOptions"
In C:\Network Switch Backup\Backup Network Switches.ps1:37 Zeichen:1
+ $session.Open($sessionOptions)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentNullException
 
Ausnahme beim Aufrufen von "GetFiles" mit 4 Argument(en):  "Session is not opened"
In C:\Network Switch Backup\Backup Network Switches.ps1:44 Zeichen:1
+ $transferResult = $session.GetFiles("/cfg/startup-config", $outputpat ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException
martin

Re: Problem using WinSCP .NET assembly

Show us your code.
Jan Kreuz

Problem using WinSCP .NET assembly

Hello Martin,
I wanted to include .NET assembly into my script (which is just copying data from SFTP server).
I downloaded WinSCP-X.X.X-Automation.zip package and extracted it into my PowerShell script folder. When I launched the script I got following error message:
New-Object : The value supplied is not valid, or the property is read-only. Change the value, and then try again.
At C:\projects\AirFASE-script\copy-data-from-TVS_v1.1.ps1:21 char:19
+ $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [New-Object], Exception
+ FullyQualifiedErrorId : SetValueException,Microsoft.PowerShell.Commands.NewObjectCommand

When I normally installed WinSCP, the script worked well. I need to have the script simply portable to different machine without WinSCP installation.

Can you pls. helo what could be wrong?
Thanks Jan