qiuzhizhe8888 2022-05-22 17:35 采纳率: 37.5%
浏览 26

网上就没有一个能用的C#调用PowerShell,执行多个耗时的命令,并实时输出过程中输出的内容的例子么?

从早上找到下午,看了无数个博客、stackoverflow……

就没找到一个符合的例子

需求是:本来是在powerShell中手工调用几个第三方程序提供的命令,分别对一个文件夹最后那个所有图片进行色彩调整、裁剪、最后合并

每个命令,都耗时很长,并且处理完每个文件,它都会输出处理结果,比如:pic0失败,格式不符合要求。pic1成功,pic2成功

 

现在我想用C#程序,去调用powershell执行。需要依次执行三个命令,每个命令执行过程中,要实时返回几千张图片,每个的成功与否,而不是最后一下次返回,就像真的在powershell中执行那样。然后我拿到所有的结果后,自己写逻辑分析,对失败的,执行第2个命令(必然成功),也是实时返回所有结果。最后前两个执行完,自动执行第3个(所有的必然成功)

——————————————————————————————————————————

请不要没亲自试过的,随便搜一下粘贴,我可以负责任的说,下面等等一堆,都不对

https://stackoverflow.com/questions/34398023/get-powershell-commands-output-when-invoked-through-code

https://stackoverflow.com/questions/39505633/c-sharp-get-real-time-powershell-script-output

https://stackoverflow.com/questions/41640443/c-sharp-updating-text-box-with-powershell-console-details-in-real-time

……

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-23 09:50
    关注

    仅供参考:(尽管是C)

    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    char YN(int k) {
        FILE *f;
        char fn[40];
        char ln[80];
        char yn;
        int n;
    
        yn='N';
        sprintf(fn,"d:\\ping%d.txt",k);
        f=fopen(fn,"r");
        if (NULL!=f) {
            n=0;
            while (1) {
                if (NULL==fgets(ln,80,f)) break;//
                if (strstr(ln,"ms ")) {
                    yn='Y';
                    break;//
                }
                n++;
                if (n>=4) break;//
            }
            fclose(f);
        }
        return yn;
    }
    void main(int argc,char **argv) {
        char cmdstr[256];
        int i;
        int IP[3];
        char c;
    
        if (argc<2) {
        USAGE:
            printf("Usage example:\n    %s 192.168.60.\nto test 192.168.60.1-254\n",argv[0]);
            return;
        }
        if (4==sscanf(argv[1],"%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&c)) {
            if (0<=IP[0] && IP[0]<=255
             && 0<=IP[1] && IP[1]<=255
             && 0<=IP[2] && IP[2]<=255
             && '.'==c) {
                for (i=1;i<255;i++) {
                    sprintf(cmdstr,"cmd /c ping %s%d -n 1 -w 1000 >d:\\ping%d.txt",argv[1],i,i);
                    WinExec(cmdstr,SW_HIDE);
                }
                Sleep(3000);
                for (i=1;i<255;i++) {
                    printf("%c %s%d\n",YN(i),argv[1],i);
                }
                Sleep(3000);
                WinExec("cmd /c del /q d:\\ping*.txt",SW_HIDE);
            } else goto USAGE;
        } else goto USAGE;
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月22日

悬赏问题

  • ¥100 用两台电脑局域联网进行MT5的EA参数优化,但是连接不上
  • ¥15 FastAPI报错: AsyncSession不是有效Pydantic类型
  • ¥30 python写递归代码
  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助
  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验
  • ¥23 matlab可以把相图转换为庞加莱映射吗
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错