header1   header
header
header Register : : Login header
header
connector   connector
menuleft menuright
submenu   submenu
left
help translate a vbs to powershellscript
Last Post 18 Mar 2010 05:21 AM by pbm. 4 Replies.
Printer Friendly
  •  
  •  
  •  
  •  
  •  
Sort:
PrevPrev NextNext
You are not authorized to post a reply.
Author Messages Not Resolved
pbmUser is Offline
New Member
New Member
Posts:2
Avatar

--
17 Mar 2010 03:32 AM

    hi there.
    I work as an it techician in a company and i need som help :-)
    I am having some trouble getting login scripts, run quickly after we upgrade our terminal server to windows 2008.somehow the logon procedure slows down when vbscrips are added to the login, eventhou the scripts itselft run fast and smooth when running it manualy.. win2008 terminal server suck .. so i thought that if we made a powershell script instead of vbscript maby the logon process will run faster , but i only know a littlebit about powershell scripting so I hope some one here could translate my vbscipt to a powershell so I could test if powershell login script run faster that vbscript in a win2008 terminalserver inviroment.
    here is the script :



    Set WshNetwork = WScript.CreateObject("WScript.Network")

    On Error Resume Next

    '-------------------------finding the name of the printerserver from a system variable

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Environment",,48)

    For Each objItem in colItems

     If objItem.name = "printserver" Then
      PrintServer= "\\" & objItem.VariableValue & "\"
      Exit For
     End If
     
    Next


    ' ----------------------- removing printers if a check file isn't there.
    dim Res

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.FileExists("w:\windows\stopPrint.txt") Then
    Else
     SET objPrinters = WshNetwork.EnumPrinterConnections
     FOR intCounter = 0 TO objPrinters.Count - 1 STEP 2
      if objPrinters.Item(intCounter+1) = "Microsoft XPS Document Writer" then
      else   
       Res=WshNetwork.RemovePrinterConnection(objPrinters.Item(intCounter+1),TRUE,TRUE)
      end if
     Next

    ' -----------------------installing printer
    WshNetwork.AddWindowsPrinterConnection PrintServer & "printer1"
    WshNetwork.AddWindowsPrinterConnection PrintServer & "printer2"
    WshNetwork.AddWindowsPrinterConnection PrintServer & "printer3"
    WshNetwork.AddWindowsPrinterConnection PrintServer & "printer4"
    WshNetwork.AddWindowsPrinterConnection PrintServer & "printToFile"

     Set objFile = objFSO.CreateTextFile("w:\windows\stopPrint.txt")
     
    End If


    '-----------------------setup systemvarables

    'Set WSHShell = WScript.CreateObject("WScript.Shell")
    'SET objEnv = WshShell.Environment("USER")    
    'objEnv.item("testVariable") = "q:\test"
    'set objEnv = nothing

     

    '------------------------saetter default printer

    WshNetwork.SetDefaultPrinter PrintServer & "printer1"

    '------------------------cleaning up
    Set WshNetwork = Nothing
    Set colItems = Nothing
    Set objWMIService = Nothing
    Set objPrinters = Nothing
    Set objFile = nothing
    Set objFSO = nothing

    George HowarthUser is Offline
    Basic Member
    Basic Member
    Posts:360
    Avatar

    --
    17 Mar 2010 06:21 AM

    I think I'm starting to go crazy... I can't for the life of me find any Delete() method to delete a printer. I managed to get this far:

    trap { continue }

    #------------------------ Find the name of the printer server from a system variable

    $colItems = Get-WmiObject -Class Win32_Environment -ComputerName "." | Select Name

    foreach ($objItem in $colItems)
    {
        if ($objItem.Name -eq "printserver")
        {
            $printServer = "\\" + $objItem.VariableValue + "\"
            break
        }
    }

    #------------------------ Remove printers if a check file isn't there

    $objFso = New-Object -ComObject Scripting.FileSystem.Object

    if (!$objFso.FileExists("w:\windows\stopPrint.txt"))
    {   
        # Deleting a printer???
       
        #------------------------ Install printers
       
        $objNetwork = New-Object -ComObject WScript.Network
        $objNetwork.AddWindowsPrinterConnection($printServer + "printer1")
        $objNetwork.AddWindowsPrinterConnection($printServer + "printer2")
        $objNetwork.AddWindowsPrinterConnection($printServer + "printer3")
        $objNetwork.AddWindowsPrinterConnection($printServer + "printer4")
        $objNetwork.AddWindowsPrinterConnection($printServer + "printToFile")

        $objFile = $objFso.CreateTextFile("w:\windows\stopPrint.txt")
    }

    #------------------------ Setup environment variables

    #$wshShell = New-Object -ComObject WScript.Shell
    #$objEnv = $wshShell.Environment("USER")
    #$objEnv.Item("testVariable") = "q:\test"
    #$objEnv = $null

    #------------------------ Set the default printer

    $objNetwork = New-Object -ComObject WScript.Network
    $objNetwork.SetDefaultPrinter($printServer + "printer1")

    #----------------------- Clean up

    $colItems = $null
    $objFile = $null
    $objFso = $null
    $objPrinter = $null
    $objNetwork = $null

    Hopefully someone else knows how to delete a printer.

    PoSherLifeUser is Offline
    Basic Member
    Basic Member
    Posts:364
    Avatar

    --
    17 Mar 2010 08:08 AM
    you would need to use the Win32_Printer Class. Also, we can let PoSh natively check for the file with Test-Path


    if (!(Test-Path "w:\windows\stopPrint.txt"))
    {
    GWMI Win32_Printer -filter "Network='True'" | ? {$_.Name "Microsoft XPS Document Writer" ) | % {$_.Delete}


    When at first you don't succeed Step-Into

    http://theposherlife.blogspot.com
    http://www.jandctravels.com

    PoSherLifeUser is Offline
    Basic Member
    Basic Member
    Posts:364
    Avatar

    --
    17 Mar 2010 08:27 AM
    there's also a lot of room for use of PoSh here:

    #------------------------ Find the name of the printer server from a system variable

    if ($env:printserver) {
    $printServer = "\\" + $env:printserver + "\"
    }

    #------------------------ Remove printers if a check file isn't there

    $netPrint = gwmi Win32_Printer -filter "Network='True'"

    if (!(Test-Path "w:\windows\stopPrint.txt"))
    {
    #------------------------ Delete network printer
    $netPrint | ? {$_.Name "Microsoft XPS Document Writer" ) | % {$_.Delete}

    #------------------------ Install printers
    $objNetwork = New-Object -ComObject WScript.Network

    # input list of printer names here
    $printers = "printer1","printer2","printer3","printer4","printToFile"
    $printers | % {$objNetwork.AddWindowsPrinterConnection($printServer + "$_") }

    New-Item "w:\windows\stopPrint.txt" -ItemType file
    }

    #------------------------ Setup environment variables

    #$env:TestVariable = "q:\test"

    #------------------------ Set the default printer

    $netPrint | ? {$_.Name -match ($printServer + "printer1")} | % { $_.SetDefaultPrinter()



    ****NOTE****
    I didn't have time to test this, so their may be some typo's!!
    When at first you don't succeed Step-Into

    http://theposherlife.blogspot.com
    http://www.jandctravels.com

    pbmUser is Offline
    New Member
    New Member
    Posts:2
    Avatar

    --
    18 Mar 2010 05:21 AM
    thanks for the quick reply. I will try to test the script today or tommorow and will give you feedback :-)
    You are not authorized to post a reply.


    Active Forums 4.3
    right
    footer   footer
    footer Sponsored by Quest Software • SAPIEN Technologies • Compellent • Microsoft Windows Server 2008 R2 footer
    footer   footer