GVKun编程网logo

在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出

19

在本文中,我们将带你了解在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的GPO运行P

在本文中,我们将带你了解在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的GPO运行PowerShell启动脚本,无需等待、powershell – 在Power Shell脚本中获取IIS的应用程序池标识、PowerShell 在运行脚本时打开 excel 并崩溃、PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令

本文目录一览:

在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出

在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出

我正在编写一个python脚本,该脚本可以检查各种条件并相应地运行powershell脚本,以帮助我自动完成从Windows XP到Windows
7的迁移。powershell脚本提供了自己的输出,可让用户了解发生的情况。我想获取powershell脚本的输出并将其打印为python脚本的输出。我环顾了一些问题,这些问题似乎想做同样的事情,但似乎对我没有帮助。最初我尝试使用

import subprocesssubprocess.call(["C:\Users\gu2124\Desktop\helloworld.ps1"])

如此处的建议,从Python脚本运行PowerShell功能,但是我发现这等待程序首先执行并且不提供输出,因此我发现我需要subprocess.Popen()按照此处的建议使用Popen在Python中执行Powershell脚本,如何获取Powershell脚本的输出并将其更新到网页?所以我尝试了

import subprocesssubprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=sys.stdout)

我得到这个错误

Traceback (most recent call last):  File "C:\Users\gu2124\Desktop\pstest.py", line 5, in <module>    subprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.py1"], stdout=sys.stdout)  File "C:\Python27\lib\subprocess.py", line 701, in __init__    errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr)  File "C:\Python27\lib\subprocess.py", line 848, in _get_handles    c2pwrite = msvcrt.get_osfhandle(stdout.fileno())  File "<string>", line 523, in __getattr__  File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 150, in __getattr__    return syncreq(self, consts.HANDLE_GETATTR, name)  File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 71, in syncreq    return conn.sync_request(handler, oid, *args)  File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\protocol.py", line 434, in sync_request    raise objAttributeError: DebugOutput instance has no attribute ''fileno''

我不完全确定这是什么意思,但是从阅读AttributeError后我的理解来看:StringIO实例没有属性’fileno’是因为我不正确地使用了stdout。我环顾了四周,发现了这个为什么我的python子进程代码无法正常工作?答案在哪里使用,stdout=subprocess.PIPE所以我尝试了这个

import subprocesssubprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=subprocess.PIPE)

这也没有给我输出最后我看到了这个http://www.pythonforbeginners.com/os/subprocess-for-system-
administrators并将我的代码更改为

import subprocessp = subprocess.Popen(["powershell","C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=subprocess.PIPE)print p.communicate

我认为这可能是因为我最初尝试从命令行运行Powershell脚本,所以必须首先打开Powershell。当我直接在命令行中输入这些命令时,它会按照应有的方式工作,但是当我通过python脚本运行时,它会给出

<bound method Popen.communicate of <subprocess.Popen object at 0x00000000026E4A90>>

我想这是一种改进,但并不是我期望的“ Hello world”。我不知道下一步该怎么做才能使它正常工作。任何帮助将不胜感激

另外,如果需要我正在使用的powershell脚本,那就是

$strString = "Hello World"write-host $strStringfunction ftest{$test = "Test"write-host $test}

编辑:我试图升级到python 3.3就像在第一个答案中建议的那样,但是我仍然无法使其工作。我使用了命令,p =subprocess.Popen([''powershell.exe'',"C:\\Users\\gu2124\\Desktop\\helloworld.ps1"],stdout=sys.stdout)并确定文件在那里,但是出现了这个错误:

Traceback (most recent call last):  File "<pyshell#3>", line 1, in <module>    p = subprocess.Popen([''powershell.exe'', "C:\\Users\\gu2124\\Desktop\\helloworld.ps1"], stdout=sys.stdout)  File "C:\Python27\lib\subprocess.py", line 701, in __init__    errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr)  File "C:\Python27\lib\subprocess.py", line 848, in _get_handles    c2pwrite = msvcrt.get_osfhandle(stdout.fileno())UnsupportedOperation: fileno

答案1

小编典典
  1. 确保您可以运行Powershell脚本(默认情况下处于禁用状态)。您可能已经做到了。http://technet.microsoft.com/zh-CN/library/ee176949.aspx

    Set-ExecutionPolicy RemoteSigned
  2. 在您的powershell脚本上运行以下python脚本helloworld.py

    # -*- coding: iso-8859-1 -*-

    import subprocess, sys

    p = subprocess.Popen([“powershell.exe”,
    “C:\Users\USER\Desktop\helloworld.ps1”],
    stdout=sys.stdout)
    p.communicate()

该代码基于python3.4(或任何3.x系列解释器),尽管它也应在python2.x系列上工作。

C:\Users\MacEwin\Desktop>python helloworld.pyHello World

GPO运行PowerShell启动脚本,无需等待

GPO运行PowerShell启动脚本,无需等待

我试图为我的Windows域中的PC设置一个PowerShell启动脚本。 该脚本需要大约20秒来完成,我不想让引导过程等到它完成。 我设置它像这篇文章中所述http://technet.microsoft.com/en-us/magazine/dd630947.aspx另外我设置GPO选项运行启动脚本asynchronosly在此处http://msdn.microsoft descrbed 。 com / en-us / library / ms811602.aspx但引导过程仍然比不使用脚本需要20秒。 任何提示如何解决这个问题?

EC2 linux实例启动时启动一个程序

修改/设置initramfs脚本中的根设备

initrd和引导Linux内核

在Windowslogin窗口之前启动批处理脚本

在Linux中查找login时间

关于启动脚本的事情是,你可以保证它在任何人登录之前运行,所以延迟将在那里。 异步处理的功能是同时启用多个启动脚本,但是在登录之前必须完成所有脚本。

自动取款机。 我有两个可能的解决方案:

将脚本更改为登录脚本。 这几乎只是移动延迟,但是您可以在桌面加载期间/之后运行脚本。

有一个启动脚本,安排您的“真正的”启动脚本运行前。 1分钟后创建。 at.exe / schtasks.exe将成功创建您的任务,您将能够登录。 然后您的脚本将被执行后, 在后台1分钟。

总结

以上是小编为你收集整理的GPO运行PowerShell启动脚本,无需等待全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

powershell – 在Power Shell脚本中获取IIS的应用程序池标识

powershell – 在Power Shell脚本中获取IIS的应用程序池标识

尝试在IIS中获取特定名称的应用程序池标识,例如:Test

成功通过下面的代码得到它,但不想循环通过所有的webapps,是否有任何容易通过指定名称得到它?

Import-Module WebAdministration
Get-WebApplication

$webapps = Get-WebApplication
$list = @()
foreach ($webapp in get-childitem IIS:\AppPools\)
{
    $name = "IIS:\AppPools\" + $webapp.name
    $item = @{}
    if ($webapp.name -eq 'Test')
    {        
        $item = $webapp.processModel.identityType   
        break
    }
}


echo $webapp.processModel.identityType
只需组合路径并检索项目.这将有效:
$item = Get-Item (Join-Path 'IIS:\AppPools\' 'Test') | 
   select -ExpandProperty processModel | 
   select -expand identityType

PowerShell 在运行脚本时打开 excel 并崩溃

PowerShell 在运行脚本时打开 excel 并崩溃

通过设置 $excel.Visible = $true,由于涉及所有屏幕更新,代码会变得更慢。

此外,运行代码后没有保存工作簿,而且由于您从未退出 Excel 并从内存中删除 COM 对象,最终它会因资源不足而崩溃。

试试:

# start excel
$excel = New-Object -comobject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

# get files and loop through the list
# the usual extension for macro-enabled Excel files is `*.xlsm`.
# if your files have this extension,add -Filter '*.xlsm' to the 
# Get-ChildItem command below.
Get-ChildItem -Path 'C:\Users\ME\Desktop\TEST' -File | ForEach-Object {
    # open the file
    $workbook = $excel.Workbooks.Open($_.FullName)

    # run macro
    $app = $excel.Application
    $app.run("PERSONAL.xlsb!Module6.MyMacro")
    $workbook.Close($true)  # $true --> save changes
}

$excel.Quit()

# cleanup COM objects
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()

PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令

PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令

试试这个命令

Start-Process powershell.exe -ArgumentList "-noexit"  



 Start-Process powershell -ArgumentList "-noexit","-noprofile","-command &{Get-Location}"

启动窗口最大化我们的参数-WindowStyle Maximized

提供更多代码以获取更多信息

今天关于在python脚本中运行powershell脚本,如何使python在运行时打印powershell输出的介绍到此结束,谢谢您的阅读,有关GPO运行PowerShell启动脚本,无需等待、powershell – 在Power Shell脚本中获取IIS的应用程序池标识、PowerShell 在运行脚本时打开 excel 并崩溃、PowerShell 脚本打开一个新的 PowerShell 窗口并运行命令等更多相关知识的信息可以在本站进行查询。

本文标签: