Einstellbare Parameter in txt und PowerShell Script übergeben
Erstmal wünsche ich einen schönen guten Tag
Nun zu meinem Problem:
Ich logge mich bei einem ftp Server ein. Kopiere dort eine Datei hin und verlasse den ftp Server wieder. danach erstelle ich eine log Datei, über den Verlauf des Kopiervorgangs und sende mir diese per Mail. Realisiert habe ich das mit einer Batch Datei, einer txt Datei und einem PowerShell Script.
Batch:
openftp.txt:
Script:
Ich soll jetzt die ganzen einstellbaren Parameter wie USERNAME, FTPSERVER,... und Pfade in eine eigene txt oder ini Datei speichern und von dort dann auslesen. (Variablen.ini)
Ich weis, dass ich mit folgenden etwas auslesen kann, wenn ich weis, in welcher Zeile sich der gewünschte Parameter befindet:
Variablen.ini:
nun ließt es mir die zweite Zeile also ftpserver=DOMAIN aus und schreibt mir DOMAIN in die Variable Server.
Wie kann ich nun diese Werte an das PowerShell Skript und das openftp.txt File übergeben um diese dann dort zu verwenden?
Nun zu meinem Problem:
Ich logge mich bei einem ftp Server ein. Kopiere dort eine Datei hin und verlasse den ftp Server wieder. danach erstelle ich eine log Datei, über den Verlauf des Kopiervorgangs und sende mir diese per Mail. Realisiert habe ich das mit einer Batch Datei, einer txt Datei und einem PowerShell Script.
Batch:
set LogDir=PFADZURLOGDATEI
set LogFile=NAMELOGDATEI
set LogFileDir=%LogDir%\%LogFile%
ftp -i -s:openftp.txt
PowerShell.exe -ExecutionPolicy Bypass -Command "& 'PFADZURPOWERSHELLEXE'" /j
openftp.txt:
open DOMAIN
USERNAME
PASSWORD
lcd PFADDERZUUEBERTRAGENDENDATEI
put DATEI
close
quit
Script:
$abs=
$emp=
$sub="Meldung Hompage"
$att=
$User =
$PWord = ConvertTo-SecureString -String "PASSWORD" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential (“User”, $PWord)
Send-MailMessage -To $emp -From $abs -Subject "Bericht" -Body "Im Anhang befindet sich die log Datei :)" -Credential ($Credential) -Attachments $att -SmtpServer "SERVER"
Ich soll jetzt die ganzen einstellbaren Parameter wie USERNAME, FTPSERVER,... und Pfade in eine eigene txt oder ini Datei speichern und von dort dann auslesen. (Variablen.ini)
Ich weis, dass ich mit folgenden etwas auslesen kann, wenn ich weis, in welcher Zeile sich der gewünschte Parameter befindet:
@echo off
set LineNo=2
set "Server="
set /a LineNo-=1
for /f "tokens=1,2* delims==" %%a in ('more/e +%LineNo% ^< Variablen.ini') do (
if not defined Server set "Server=%%b"
)
Variablen.ini:
[Server]
ftpserver=DOMAIN
ftpuser=USER
ftppw=PASSWORD
nun ließt es mir die zweite Zeile also ftpserver=DOMAIN aus und schreibt mir DOMAIN in die Variable Server.
Wie kann ich nun diese Werte an das PowerShell Skript und das openftp.txt File übergeben um diese dann dort zu verwenden?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665264
Url: https://administrator.de/contentid/665264
Ausgedruckt am: 19.11.2024 um 13:11 Uhr
10 Kommentare
Neuester Kommentar
Moin,
ich würde aus dem Powershell und Batch-Mix ein reines Powershell-Script erstellen (zzgl. der txt.Datei)
Beispielsweise so (Quelle: https://www.thomasmaurer.ch/2010/11/powershell-ftp-upload-and-download/)
Und ein Einlesen von Parametern könnte so aussehen:
(Quelle: https://stackoverflow.com/questions/12368142/powershell-retrieving-a-var ..)
Edit:
schaue dir auch mal die Lösung des Entwicklers von WinSCP, Martin Prikryl, an:
https://stackoverflow.com/questions/19059394/powershell-connect-to-ftp-s ...
Hier zur Überschrift "3rd party library" scrollen
Gruß
em-pie
ich würde aus dem Powershell und Batch-Mix ein reines Powershell-Script erstellen (zzgl. der txt.Datei)
Beispielsweise so (Quelle: https://www.thomasmaurer.ch/2010/11/powershell-ftp-upload-and-download/)
### UPLOAD FILES
# Config
$Username = "FTPUSER"
$Password = "P@assw0rd"
$LocalFile = "C:\Temp\file.zip"
$RemoteFile = "ftp://thomasmaurer.ch/downloads/files/file.zip"
# Create FTP Rquest Object
$FTPRequest = [System.Net.FtpWebRequest]::Create("$RemoteFile")
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.Credentials = new-object System.Net.NetworkCredential($Username, $Password)
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $true
# Read the File for Upload
$FileContent = gc -en byte $LocalFile
$FTPRequest.ContentLength = $FileContent.Length
# Get Stream Request by bytes
$Run = $FTPRequest.GetRequestStream()
$Run.Write($FileContent, 0, $FileContent.Length)
# Cleanup
$Run.Close()
$Run.Dispose()
### DOWNLOAD FILES
# Config
$Username = "FTPUSER"
$Password = "P@assw0rd"
$LocalFile = "C:\Temp\file.zip"
$RemoteFile = "ftp://thomasmaurer.ch/downloads/files/file.zip"
# Create a FTPWebRequest
$FTPRequest = [System.Net.FtpWebRequest]::Create($RemoteFile)
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$FTPRequest.UseBinary = $true
$FTPRequest.KeepAlive = $false
# Send the ftp request
$FTPResponse = $FTPRequest.GetResponse()
# Get a download stream from the server response
$ResponseStream = $FTPResponse.GetResponseStream()
# Create the target file on the local system and the download buffer
$LocalFileFile = New-Object IO.FileStream ($LocalFile,[IO.FileMode]::Create)
[byte[]]$ReadBuffer = New-Object byte 1024
# Loop through the download
do {
$ReadLength = $ResponseStream.Read($ReadBuffer,0,1024)
$LocalFileFile.Write($ReadBuffer,0,$ReadLength)
}
while ($ReadLength -ne 0)
Und ein Einlesen von Parametern könnte so aussehen:
(Quelle: https://stackoverflow.com/questions/12368142/powershell-retrieving-a-var ..)
## myParameters.txt
ftpserver=myftp.serv.er
ftpuser=someUsr
ftppwd=T0pS3cr37
Get-Content myParameters.txt | Foreach-Object{
$var = $_.Split('=')
New-Variable -Name $var -Value $var[1]
}
Edit:
schaue dir auch mal die Lösung des Entwicklers von WinSCP, Martin Prikryl, an:
https://stackoverflow.com/questions/19059394/powershell-connect-to-ftp-s ...
Hier zur Überschrift "3rd party library" scrollen
Gruß
em-pie
Oder du schreibst deine Parameter als JSON in eine Datei und liest die dann per PS ein
Manuel
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
- https://www.windowspro.de/script/json-powershell-erzeugen-bearbeiten
Manuel
Frohe Ostern Worker26,
um den Path aus dem txt-file herauszubekommen hilft vielleicht dieser Ansatz:
Die Datei path.txt enthält: "Path=C:\Temp\file.zip"
Nun wird die Variable angezeigt: C:\Temp\file.zip
Gruß okidoki
um den Path aus dem txt-file herauszubekommen hilft vielleicht dieser Ansatz:
Die Datei path.txt enthält: "Path=C:\Temp\file.zip"
@echo off& setlocal
for /F "delims=" %%A IN ('findstr /C:"Path" "path.txt"') DO set pin=%%A
for /F "tokens=1,* delims==" %%i in ("%pin%") do set string=%%j
echo %string%
Nun wird die Variable angezeigt: C:\Temp\file.zip
Gruß okidoki