Я новичок и учусь создавать сценарии PowerShell, чтобы упростить жизнь в ИТ.
В настоящее время я пытаюсь создать скрипт, который запускает определенный инструмент Microsoft, сканирует определенные сетевые ресурсы в CSV-файле и создает выходной файл JSON.
Теперь, когда шаблон этого файла всегда такой же, как «Report_Username_Hostname.vba.JSON», я хотел бы добавить либо имя отсканированного каталога, либо даже диапазон чисел, например. "Report_Username_Hostname (100) .vba.JSON" или "Report_Username_Hostname (sharename) .vba.JSON"
Это необходимо, так как после этого шага переименования я загружаю этот и другие файлы в этой папке в другую папку на другом сервере, чтобы загрузить их в базу данных.
Я планировал запустить этот сценарий в самых разных местах на самом автоматическом уровне, и все они скопировали свои собранные файлы только в одну папку загрузки.
Я уже пробовал несколько вариантов, которые нашел где-то в глубине интернета, но пришел только к точке, где файл был переименован в 0 или аналогичный, но не до ожидаемого результата.
Сценарий Powershell, выполняющий эту работу:
$PSpath = 'C:\temp\FileRemediation\Scripts\'
$Rpath = $PSpath +'..\Reports\1st'
$localshare = $PSpath +'..\temp\1st'
$csvinputs = Import-Csv $PSpath\fileremediation_1st.csv
$uploadshare = '\\PGC2EU-WFSFR01.eu1.1corp.org\upload\'
# This section checks if the folder for scan reports is availabe and if not will create necessary folder.
If(!(test-path $Rpath))
{
New-Item -ItemType Directory -Force -Path $Rpath
}
If(!(test-path $localshare))
{
New-Item -ItemType Directory -Force -Path $localshare
}
Set-Location $Rpath
# This section reads input from configuration file and starts Ms ReadinessReportCreator to scan shares in configuration file.
ForEach($csvinput in $csvinputs)
{
$uncshare = $csvinput.sharefolder
$Executeable = Start-Process "C:\Program Files (x86)\Microsoft xxx\xxx.exe" `
-Argumentlist "-p ""$uncshare""", "-r", "-t 10000", "-output ""$localshare"""`
-Wait
Get-ChildItem -Path $localshare -Filter '*.JSON' | Rename-Item -NewName {$_.FullName+$uncshare}
}
# This section copies the output *.JSON file of the xxx to the share, where I they will be uploaded to DB.
Get-ChildItem -Path $localshare -Filter '*.JSON' | Where {$_.Length -ge 3} | move-item -Destination '$uploadshare'
файлremediation_1st.csv выглядит как
sharefolder
\\server\sharename
Может кто-нибудь, пожалуйста, помогите мне в этом, я понятия не имею, что я делаю неправильно.
Спасибо!
Текущая ошибка, которую я получаю
Rename-Item: невозможно переименовать указанную цель, поскольку она
представляет путь или имя устройства. В
C: \ temp \ FileRemediation \ scripts \ fileremediation_V2_1st.ps1: 28 char: 55
+ ... поделиться -Filter '* .JSON' | Rename-Item -NewName {$ _. FullName + $ uncshare}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Rename-Item], PSArgumentException
+ FullyQualifiedErrorId: Аргумент, Microsoft.PowerShell.Commands.RenameItemCommand
Как уже говорилось, мне также будет хорошо с выделенным диапазоном чисел, который добавляется к имени файла "Report_Username_Hostname (100) .vba.JSON"
Идеальный мир был бы, если бы я мог отделить \ server \ sharename от csv-файла и добавить sharename к своему имени файла.