Get UNC path for remote file

This topic contains 0 replies, has 1 voice, and was last updated by Profile photo of Forums Archives Forums Archives 5 years, 5 months ago.

  • Author
    Posts
  • #5164

    by scottbass at 2012-10-03 21:23:20

    Hi,

    I'm writing a script that parses a log file on a local machine, where that log contains a path to a file on a remote machine. I then want to send an email attaching both files. The process under which this script will run is a service account on the local machine, and I can't guarantee the network drive mappings.

    One approach would be to temporarily map a network drive via the script: net use : \\machine name\$, send the email, net use : /delete. Is there a better approach?

    Here is the script so far:

    [code2=powershell]param($JAMS_NOTIFY_JAMS_ENTRY, $JAMS_NOTIFY_REASON, $JAMS_NOTIFY_JOB_NAME, $JAMS_NOTIFY_LOG_FILENAME)

    # Make sure that the JAMS Snapin is snapped in
    Add-PSSnapin MVPSI.JAMS -ErrorAction SilentlyContinue

    # Get the JAMS entry object
    $entry = Get-JAMSEntry $JAMS_NOTIFY_JAMS_ENTRY

    # Get the JAMS entry Job Name
    $jobname = $entry.JobName

    # Get the JAMS Job Log File Name
    $jobLog = $entry.LogFilename
    $attachments=@($joblog)

    # Get the SAS Log File Name from the JAMS Job Log
    # For better performance, specify a total line count guaranteed to find the desired string
    $saslog = Get-Content $jobLog -TotalCount 40 | Where {$_ -match "^`S*saslogfull`S*(.*)$"} # finds the line ^saslogfull R:\JAMS\Logs\MySASLogFilenameOnTheRemoteMachine.log$, where R: is a drive on the remote machine
    if ($matches.Count) {$saslog = $matches[1].Trim(); $attachments+=$saslog}

    # Send email, adding attachments via pipeline
    $attachments | `
    Send-MailMessage `
    -To "johndoe@acme.com" `
    -Subject "Job Log for $jobname" `
    -From JAMS@localhost `
    -body "Generated by JAMS job Send-NotificationEmail" `
    -SMTPServer my.smtp.server[/code2]

    by scottbass at 2012-10-03 21:55:22

    Hi,

    Further progress. This is working, let me know if there's a better way...

    Thanks!

    [code2=powershell]param(
    $JAMS_NOTIFY_JAMS_ENTRY,
    $JAMS_NOTIFY_REASON,
    $JAMS_NOTIFY_JOB_NAME,
    $JAMS_NOTIFY_LOG_FILENAME
    )

    # Make sure that the JAMS Snapin is snapped in
    Add-PSSnapin MVPSI.JAMS -ErrorAction SilentlyContinue

    # Get the JAMS entry object
    $entry = Get-JAMSEntry $JAMS_NOTIFY_JAMS_ENTRY

    # Get the JAMS entry Job Name
    $jobname = $entry.JobName

    # Get the JAMS Job Log File Name
    $jobLog = $entry.LogFilename
    $attachments = @($jobLog)

    # Get the SAS Log File Name from the JAMS Job Log
    # For better performance, specify a total line count large enough to find the desired string but no larger
    $sasLog = Get-Content $jobLog -TotalCount 40 | Where {$_ -match "^`S*saslogfull`S*(.*)$"}
    if ($matches.Count) {$sasLog = $matches[1].Trim(); $attachments+=$sasLog}

    # Get the drive letter
    $drive=($saslog -split "]

    # Create a temporary drive mapping
    New-PSDrive -name $drive -psprovider Filesystem -Root "\\remote_machine_name\$drive$" -ErrorAction SilentlyContinue | Out-Null

    # Send email, adding attachments via pipeline
    $attachments | Send-MailMessage -To "johndoe@acme.com" -Subject "Job Log for $jobname" -From JAMS@localhost -body "Generated by JAMS job Send-NotificationEmail" -SMTPServer my.smtp.server

    # Delete temporary drive mapping
    Remove-PSdrive -name $drive[/code2]

    by DanielS at 2012-10-04 12:53:57

    You could consider using Push-Location (pushd), but it looks fine.

You must be logged in to reply to this topic.