Так странно здесь. У меня есть сценарий, состоящий из двух частей, один из которых выполняет сбор данных в Python, а другой - всю работу по AD в PowerShell. Вместо того, чтобы запускать один и другой, я использовал подпроцесс и стандартный вывод в Python для запуска сценария PowerShell.
После дальнейшего развития я понял, что в некоторых ситуациях мне нужно было изменить части файла CSV, прежде чем снова обработать его для заключительной части в Python. Простое использование Export-Csv
, запустите его в PowerShell, никаких проблем.
Запустите сценарий в целом, и если CSV редактируется PowerShell через подпроцесс и стандартный вывод, то по какой-то странной причине PowerShell считает, что в CSV есть дополнительная строка, и пытается обработать ее как нового пользователя.
Опять же, если код и те же условия выполнены, и он запускается только через PowerShell, дополнительная строка не появляется (проверил файл и все данные выглядят так, как должно, без дополнительных строк).
Обидные строки кода:
#Find out if its in use
while ($Exit -eq $false)
{
$Return = UserExists $Username $Description
if($Return -eq 'User does not exist')
{
$Exit = $true
$Return = $Username
}
elseif($Return -eq 'User already exists')
{
$Exit = $true
}
elseif($Return -eq 'User does not exist but username does')
{
[STRING]$StringToAppend = $IntegerToAppend
$UserName = $userinfo['username']+ $StringToAppend
$sAMAccountName = $UserName
[INT]$IntegerToAppend = [INT]$IntegerToAppend + 1
$oldUN = $userinfo['username']
$LC = $userinfo['learnerCode']
$file = 'C:/XXX/XXX/XXXstudents.csv'
$csv = Import-Csv $file
foreach($row in $csv)
{
if ($row.UserName -eq $oldUN -And $row.LearnerCode -eq $LC) {
$row.UserName = $UserName
$row.EmailAddress = $UserName + '@XXXXX.org.uk'
}}
$csv | Export-Csv $file -NoTypeInformation;
}
}
return $Return
}
Код подпроцесса:
# Launch next part of script - Powershell create users
p = subprocess.Popen(["powershell.exe",
'C:/Provisioning/ProvisionStudents.ps1'],
stdout=sys.stdout)
p.communicate()
Теперь я чувствую, что тот факт, что скрипт PowerShell редактирует CSV-файл, который он перебирает, является чем-то важным и должен быть отмечен. Однако у меня есть почти идентичный скрипт, который делает то же самое для другого сайта, и у него нет этой проблемы.
Есть идеи?