PowerShell

Alle anderen Themen ...

Moderator: ModerationP

PowerShell

Beitragvon Fen » 09. Feb 2019, 13:18

Hallo,

es gibt Aufgabenstellungen, die mit VBA recht umständlich sind, aber in PowerShell einfachern sind.

Z.B. ermittelt PS Base64 Encodierungen:

Code: Alles auswählen
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($args[0])
$EncodedText = [Convert]::ToBase64String($Bytes)
$EncodedText


Wenn das in einer PS1 Datei gespeichert wird, kann VBA das aufrufen:

Code: Alles auswählen
Sub M_B64Encode(ByVal Tx As String)
'Tx = "Hello_World" '### keine Leerzeichen! ###
PS = "c:\temp\Base64Encode.ps1 " & Tx
PS = "PowerShell -ExecutionPolicy Bypass -File " & PS

Ret = CreateObject("WScript.Shell").exec(PS).stdout.readall
Debug.Print Ret
End Sub


Es ist einfach, dies in eine Function() umzuschreiben.

Andere Beispiele sind die Base64Dekodierung, MD5, Auslesen der Images bzw Href einer Webseite.

Es gibt sicher noch weitere Möglichkeiten.

mfg
Fen
 

Re: PowerShell

Beitragvon Flotter Feger » 20. Feb 2019, 14:56

Hallo,

dafür braucht man doch nur das XMLDOM ...
Code: Alles auswählen
Function EncodeBase64(text As String) As String
  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)     

  Dim objXML As MSXML2.DOMDocument
  Dim objNode As MSXML2.IXMLDOMElement

  Set objXML = New MSXML2.DOMDocument
  Set objNode = objXML.createElement("b64")

  objNode.dataType = "bin.base64"
  objNode.nodeTypedValue = arrData
  EncodeBase64 = objNode.Text

  Set objNode = Nothing
  Set objXML = Nothing
End Function
VG Sabina

bei mir läuft Win 7 32-Bit - Office 2010 Pro Plus 32-Bit und Office 2016 Pro Plus 32-Bit
Wer auch weiter Hilfe erwartet, sollte sich nicht zu schade sein, ein kurzes Feedback zu geben.
Benutzeravatar
Flotter Feger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 2233
Registriert: 24. Okt 2016, 16:40

Re: PowerShell

Beitragvon Fennek » 20. Feb 2019, 18:34

Hallo,

vielen Dank.

Zum Dekodieren fand ich:

Code: Alles auswählen
Private Const CP_UTF8                       As Long = 65001

Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long


Function Base64Decode(ByVal strData As String) As String
    Dim objXML As Object: Set objXML = CreateObject("MSXML2.DOMDocument")
    Dim objNode As Object
    Dim by() As Byte
    Dim sV As String
   
    Set objNode = objXML.createElement("b64")
   
    objNode.DataType = "bin.base64"
    objNode.text = strData
   
    by = objNode.nodeTypedValue
    sV = String(4 * UBound(by), 0)
    lSize = MultiByteToWideChar(CP_UTF8, 0, by(0), UBound(by) + 1, StrPtr(sV), Len(sV))
   
    Base64Decode = Left$(sV, lSize)
       
    Set objNode = Nothing
    Set objXML = Nothing
End Function


und fand es recht kompliziert und unübersichtlich.

Z.Zt. vergleiche ich Web-Abfrage mit "MSXML2" und PS "iwr url", z.B. um sich in eine Webseite einzuloggen, inkl. Cookies lesen und wieder übergeben. Es hackt dabei an allen Ecken und auch langes Suchen im Netz war nicht hilfreich.

mfg
Fennek
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 607
Registriert: 12. Feb 2016, 18:56


Zurück zu Offtopic (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste