Saturday, October 26, 2013

Is there a parameter that would prevent the cmdlet from overwriting an existing file?



By default, Out-File will overwrite any existing file that has the same filename as what
you specify. Is there a parameter that would prevent the cmdlet from overwriting an
existing file?


If you run Help Out-File –full and look at parameters, you should see -NoClobber.
PS C:\> help out-file -Full
            
NAME
    Out-File

SYNOPSIS
    Sends output to a file.

SYNTAX
    Out-File [-FilePath] [[-Encoding] ] [-Append] [-Force]
    [-InputObject ] [-NoClobber] [-Width ] [-Confirm] [-WhatIf]
    []

    Out-File [[-Encoding] ] [-Append] [-Force] [-InputObject ]
    [-NoClobber] [-Width ] -LiteralPath [-Confirm] [-WhatIf]
    []


DESCRIPTION
    The Out-File cmdlet sends output to a file. You can use this cmdlet instead of
    the redirection operator (>) when you need to use its parameters.


PARAMETERS
    -Append []
        Adds the output to the end of an existing file, instead of replacing the
        file contents.

        Required?                    false
        Position?                    named
        Default value                Replace
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -Encoding
        Specifies the type of character encoding used in the file. Valid values are
        "Unicode", "UTF7", "UTF8", "UTF32", "ASCII", "BigEndianUnicode", "Default",
        and "OEM". "Unicode" is the default.

        "Default" uses the encoding of the system's current ANSI code page.

        "OEM" uses the current original equipment manufacturer code page identifier
        for the operating system.

        Required?                    false
        Position?                    2
        Default value                Unicode
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -FilePath
        Specifies the path to the output file.

        Required?                    true
        Position?                    1
        Default value               
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -Force []
        Allows the cmdlet to overwrite an existing read-only file. Even using the
        Force parameter, the cmdlet cannot override security restrictions.

        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -InputObject
        Specifies the objects to be written to the file. Enter a variable that
        contains the objects or type a command or expression that gets the objects.

        Required?                    false
        Position?                    named
        Default value               
        Accept pipeline input?       true (ByValue)
        Accept wildcard characters?  false

    -NoClobber []
        Will not overwrite (replace the contents) of an existing file. By default,
        if a file exists in the specified path, Out-File overwrites the file
        without warning. If both Append and NoClobber are used, the output is
        appended to the existing file.

        Required?                    false
        Position?                    named
        Default value                Overwrite
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -Width
        Specifies the number of characters in each line of output. Any additional
        characters are truncated, not wrapped. If you omit this parameter, the
        width is determined by the characteristics of the host. The default for the
        Windows PowerShell console is 80 (characters).

        Required?                    false
        Position?                    named
        Default value                80
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -LiteralPath
        Specifies the path to the output file. Unlike FilePath, the value of the
        LiteralPath parameter is used exactly as it is typed. No characters are
        interpreted as wildcards. If the path includes escape characters, enclose
        it in single quotation marks. Single quotation marks tell Windows
        PowerShell not to interpret any characters as escape sequences.

        Required?                    true
        Position?                    named
        Default value               
        Accept pipeline input?       true (ByPropertyName)
        Accept wildcard characters?  false

    -Confirm []
        Prompts you for confirmation before running the cmdlet.

        Required?                    false
        Position?                    named
        Default value                false
        Accept pipeline input?       false
        Accept wildcard characters?  false

    -WhatIf []
        Shows what would happen if the cmdlet runs. The cmdlet is not run.

        Required?                    false
        Position?                    named
        Default value                false
        Accept pipeline input?       false
        Accept wildcard characters?  false

        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, see
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).

INPUTS
    System.Management.Automation.PSObject



        You can pipe any object to Out-File.


OUTPUTS
    None



        Out-File does not generate any output.


NOTES


        The Out cmdlets do not format objects; they just render them and send them
        to the specified display destination. If you send an unformatted object to
        an Out cmdlet, the cmdlet sends it to a formatting cmdlet before rendering
        it.

        The Out cmdlets do not have parameters for names or file paths. To send
        data to a cmdlet that contains the Out verb (an Out cmdlet), use a pipeline
        operator (|) to send the output of a Windows PowerShell command to the
        cmdlet. You can also store data in a variable and use the InputObject
        parameter to pass the data to the cmdlet. For help, see the examples.

        Out-File sends data, but it does not emit any output objects. If you pipe
        the output of Out-File to Get-Member, Get-Member reports that no objects
        have been specified.


    -------------------------- EXAMPLE 1 --------------------------

    PS C:\>get-process | out-file -filepath C:\Test1\process.txt


    This command sends a list of processes on the computer to the Process.txt file.
    If the file does not exist, Out-File creates it. Because the name of the
    FilePath parameter is optional, you can omit it and submit the equivalent
    command "get-process | outfile C:\Test1\process.txt".





    -------------------------- EXAMPLE 2 --------------------------

    PS C:\>get-process | out-file C:\Test1\process.txt -noclobber
    Out-File : File C:\Test1\process.txt already exists and NoClobber was specified.
    At line:1 char:23
    + get-process | out-file  <<<< process.txt -noclobber


    This command also sends a list of processes to the Process.txt file, but it
    uses the NoClobber parameter, which prevents an existing file from being
    overwritten. The output shows the error message that appears when NoClobber is
    used with an existing file.





    -------------------------- EXAMPLE 3 --------------------------

    PS C:\>$a = get-process
    PS C:\>out-file -filepath C:\Test1\process.txt -inputobject $a -encoding ASCII
    -width 50


    These commands send a list of processes on the computer to the Process.txt
    file. The text is encoded in ASCII format so that it can be read by search
    programs like Findstr and Grep. By default, Out-File uses Unicode format.

    The first command gets the list of processes and stores them in the $a
    variable. The second command uses the Out-File cmdlet to send the list to the
    Process.txt file.

    The command uses the InputObject parameter to specify that the input is in the
    $a variable. It uses the Encoding parameter to convert the output to ASCII
    format. It uses the Width parameter to limit each line in the file to 50
    characters. Because the lines of output are truncated at 50 characters, the
    rightmost column in the process table is omitted.





    -------------------------- EXAMPLE 4 --------------------------

    PS C:\>set-location hklm:\software
    PS C:\>get-acl mycompany\mykey | out-file -filepath c:\ps\acl.txt
    PS C:\>get-acl mycompany\mykey | out-file -filepath filesystem::acl.txt


    These commands show how to use the Out-File cmdlet when you are not in a
    FileSystem drive.

    The first command sets the current location to the HKLM:\Software registry key.

    The second and third commands have the same effect. They use the Get-Acl cmdlet
    to get the security descriptor of the MyKey registry subkey
    (HKLM\Software\MyCompany\MyKey). A pipeline operator passes the result to the
    Out-File cmdlet, which sends it to the Acl.txt file.

    Because Out-File is not supported by the Windows PowerShell Registry provider,
    you must specify either the file system drive name, such as "c:", or the name
    of the provider followed by two colons, "FileSystem::", in the value of the
    FilePath parameter. The second and third commands demonstrate these methods.






RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/?LinkID=113363
    Out-Default
    Out-Host
    Out-Null
    Out-Printer
    Out-String
    Tee-Object



 

Featured Posts

Adding Accesspolicy to KeyVault for Service Principal Using Portal and Powershell

  Scripts path : https://drive.google.com/drive/folders/1sbBpnVFgXhUIXLdf2E9heyWDeU2f9427?usp=sharing  Adding Accesspolicy to KeyVault for S...