Было довольно много ошибок с вашим кодом. Например, вам нужно создать System.Xml.XmlWriterSettings
для подготовки красивого форматирования и не использовать свойства только для чтения или несуществующие свойства $XmlWriter
объекта.
$Path
должен быть абсолютным, а не Относительно, а также, имя элемента в XML не может содержать пробелы, поэтому Data Details
не будет работать.
В любом случае, ваш код исправлен:
$Files = Get-ChildItem -Path .\*B01-A1* -Filter *.sfu -File
$Path = "D:\SUM.xml" # Use an Absolute path here !!
# choose a pretty formatting:
$XmlSettings = [System.Xml.XmlWriterSettings]::new()
$XmlSettings.Indent = $true
$XmlSettings.IndentChars = "`t"
# create the XmlWriter object using the output path and settings
$XmlWriter = [System.XML.XmlWriter]::Create($Path, $XmlSettings)
# write the header and XML Declaration
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='style.xsl'")
$XmlWriter.WriteComment('System Information')
# create root element
$xmlWriter.WriteStartElement('Lists')
# loop thrugh the files
foreach ($f in $Files) {
$Hash = (Get-FileHash -Path $f.FullName -Algorithm SHA256).Hash
# add a 'File' element for each file
$XmlWriter.WriteStartElement('DataDetails') # an elementname cannot contain spaces
# add three pieces of information:
$xmlWriter.WriteElementString('Name',$f.Name)
$xmlWriter.WriteElementString('SHA256',$Hash)
$xmlWriter.WriteElementString('Size',$f.Length)
# close the 'File' element
$xmlWriter.WriteEndElement()
}
# close the root element
$xmlWriter.WriteEndElement()
# finalize the document:
$xmlWriter.WriteEndDocument()
$xmlWriter.Flush()
$xmlWriter.Close()
Надеюсь, что поможет