小编Ash*_*ron的帖子

启动隐藏的Internet Explorer

我的公司正在使用Sharepoint和ADFS.但是,对于WebDav的使用,我们需要用户获取一些令牌,这些令牌只能通过打开Internet Explorer并导航到两个站点来获得.然而,他们将每隔约30分钟丢失令牌,因此它必须是一个经常性的任务.

所以现在我的工作是:

  • 用IE打开2个网站
  • 每30分钟一次
  • 不要惹恼用户

我目前的解决方案是"有点"工作,但我并不满意.我只有VSExpress所以没有服务.

我有一个最小化的最大不透明度可见假Windows窗体.我有一个GPO,它将EXE文件复制到计算机,然后创建一个定时作业,在登录后每30分钟启动一次.然而,如果他们没有手动运行EXE,人们仍然无法访问webdav.此外,每当EXE运行当前应用程序时,用户正在失去焦点,当您输入内容并且必须再次单击时,这有点烦人.我当前的代码如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        MainMethod();
    }
    private void MainMethod()
    {
        RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\InternetExplorer.ApplicationMedium\CLSID", false);
        if (root!=null)
        { 
            opensite();
            Application.Exit();
        }
    }
    private void opensite()
    {
        try
        {
            SHDocVw.InternetExplorer _ie1 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
            SHDocVw.InternetExplorer _ie2 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));
            _ie1.Visible = false;
            _ie2.Visible = false;
            _ie1.Navigate("SITENAME1.html");
            _ie2.Navigate("SITENAME2.html");
            System.Threading.Thread.Sleep(10000);
            _ie1.Quit();
            _ie2.Quit();
        }
        catch(Exception e)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我觉得有一种更优雅的方式来做到这一点.我听说打开隐藏的IE的唯一方法是通过

(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));

但有了这个,我依赖于并非所有客户都拥有的注册表项.

你能帮我以可靠的方式打开IE吗?我可能会对如何将重复任务设置为每30分钟启动一次(因为我认为它没有正确执行atm).

谢谢大家.

编辑:

感谢/sf/users/354550591/ 我现在用以下方法替换了opensite位:

private void Form1_Load(object sender, EventArgs e)
    { …
Run Code Online (Sandbox Code Playgroud)

c# internet-explorer scheduled-tasks gpo

5
推荐指数
1
解决办法
3875
查看次数

命令在ISE中运行,但不在控制台中作为ps1运行

我找到了很多线程并经历了它们,但没有一个真的解决了我的问题.我尽量保持简短.

New-PSDrive –Name "G" –PSProvider FileSystem –Root "\\dom\dfs\dom-loc-Share" –Persist
Run Code Online (Sandbox Code Playgroud)

如果我从ISE运行它,它的工作完全正常.当我将其粘贴到控制台时,它工作正常.如果我尝试在控制台中运行ps1,它不起作用.

  • 我重启了ISE
  • 我查了一下,都在单线程公寓里跑
  • Executionpolicy不受限制
  • 我以管理员身份运行

你能帮我么?

powershell

5
推荐指数
1
解决办法
878
查看次数

使用 PowerShell 将数据表导出到 Excel

System.Data.Datatables我有一个可以从 TableName 和 ColumnName-Array 的简单输入创建的函数。填写表格后,我想将它们添加到数据集并将其导出到 Excel 文档中。

下面的代码做到了这一点,但是在导出到 Excel 时,我发现有一点不太优雅。每个表都必须导出为 csv,然后重新导入到 Excel。

有没有更好更简洁的方法直接在 Excel 中使用 DataTables?

Function MakeTable ($TableName, $ColumnArray)
{
    $btab = New-Object System.Data.DataTable("$TableName")
    foreach($Col in $ColumnArray)
    {
        $MCol = New-Object System.Data.DataColumn $Col;
        $btab.Columns.Add($MCol)
    }
    return , $btab
}

function DataSetToExcel ($Ds, $workdirectory)
{
    $excel = New-Object -ComObject excel.application 
    $workbook = $excel.Workbooks.Add(1)
    $i = 0
    for($DsIndex=0;$DsIndex -lt $ds.Tables.Count;$DsIndex++)
    {
        $Table = $ds.tables[$Dsindex]
        if($Dsindex -ne 0)
        {
            $workbook.worksheets.Add() | Out-Null #Erstellt neues Arbeitsblatt
        }
        $Table | Export-Csv "$workdirectory\input.csv" -Encoding …
Run Code Online (Sandbox Code Playgroud)

c# datatable excel powershell

0
推荐指数
1
解决办法
1万
查看次数