Подпроцесс Python, вызывающий проблемы с обработкой PowerShell CSV - PullRequest
0 голосов
/ 19 июня 2019

Так странно здесь. У меня есть сценарий, состоящий из двух частей, один из которых выполняет сбор данных в 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-файл, который он перебирает, является чем-то важным и должен быть отмечен. Однако у меня есть почти идентичный скрипт, который делает то же самое для другого сайта, и у него нет этой проблемы.

Есть идеи?

1 Ответ

0 голосов
/ 19 июня 2019

Как @Lee_Dailey предложила, экспорт в отдельный CSV-файл, кажется, делает свое дело, но не уверен, почему это вызывает проблемы только при запуске через подпроцесс, хотя

Если кто-нибудь захочет объяснить, почему это может быть, я был бы вечно благодарен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...