Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

To ALIAS or not to ALIAS

Aug
2,799
144
Ref: Using PowerShell from TCC without a 3rd-Party DLL

The ALIAS command is working as documented,
but what I want to do may be too complicated for it.

Code:
E:\Utils>ver

TCC  36.00.17 x64   Windows 10 [Version 10.0.19045.7058]

E:\Utils>which pshell
pshell is an alias : curl -s -X POST -d "%$" http://127.0.0.1:8080/

E:\Utils>pshell get-date;2026-1960

April 6, 2026 2:26:20 PM
66

Expanded, the alias becomes;

Code:
E:\Utils>curl -s -X POST -d "get-date;2026-1960" "http://127.0.0.1:8080/"

Question: How did the quotes get wrappeed around the URL?

Code:
E:\Utils>setdos /x-5

E:\Utils>pshell $jlc = new-object -com Scripting.FileSystemObject;$jlc | get-member

   TypeName: System.__ComObject#{2a0b9d10-4b87-11d3-a97a-00104b365c9f}

Name                MemberType Definition
----                ---------- ----------
BuildPath           Method     string BuildPath (string Path, string Name)
CopyFile            Method     void CopyFile (string Source, string Destination, bool OverWriteFiles)
CopyFolder          Method     void CopyFolder (string Source, string Destination, bool OverWriteFiles)
CreateFolder        Method     IFolder CreateFolder (string Path)
CreateTextFile      Method     ITextStream CreateTextFile (string FileName, bool Overwrite, bool Unicode)
DeleteFile          Method     void DeleteFile (string FileSpec, bool Force)
DeleteFolder        Method     void DeleteFolder (string FolderSpec, bool Force)
DriveExists         Method     bool DriveExists (string DriveSpec)
FileExists          Method     bool FileExists (string FileSpec)
FolderExists        Method     bool FolderExists (string FolderSpec)
GetAbsolutePathName Method     string GetAbsolutePathName (string Path)
GetBaseName         Method     string GetBaseName (string Path)
GetDrive            Method     IDrive GetDrive (string DriveSpec)
GetDriveName        Method     string GetDriveName (string Path)
GetExtensionName    Method     string GetExtensionName (string Path)
GetFile             Method     IFile GetFile (string FilePath)
GetFileName         Method     string GetFileName (string Path)
GetFileVersion      Method     string GetFileVersion (string FileName)
GetFolder           Method     IFolder GetFolder (string FolderPath)
GetParentFolderName Method     string GetParentFolderName (string Path)
GetSpecialFolder    Method     IFolder GetSpecialFolder (SpecialFolderConst SpecialFolder)
GetStandardStream   Method     ITextStream GetStandardStream (StandardStreamTypes StandardStreamType, bool Unicode)
GetTempName         Method     string GetTempName ()
MoveFile            Method     void MoveFile (string Source, string Destination)
MoveFolder          Method     void MoveFolder (string Source, string Destination)
OpenTextFile        Method     ITextStream OpenTextFile (string FileName, IOMode IOMode, bool Create, Tristate Format)
Drives              Property   IDriveCollection Drives () {get}


E:\Utils>setdos /x+5

Expanded, the PShell alias becomes...
Code:
E:\Utils>curl -s -X POST -d "$jlc = new-object -com Scripting.FileSystemObject;$jlc " "http://127.0.0.1:8080/|"
 get-member

...and while it works un-expanded, it does not work expanded.
Code:
E:\Utils>curl -s -X POST -d "$jlc = new-object -com Scripting.FileSystemObject;$jlc " "http://127.0.0.1:8080/|"
 get-member

Drives
------
System.__ComObject

That's because of the SETDOS /X-5 command.

With SETDOS /X+5 active, the expanded alias becomes;
Code:
E:\Utils>setdos /x+5

E:\Utils>curl -s -X POST -d "$jlc = new-object -com Scripting.FileSystemObject;$jlc " "http://127.0.0.1:8080/|"
 get-member

With SETDOS /X-5 active, the expanded alias becomes...
Code:
E:\Utils>setdos /x-5

E:\Utils>curl -s -X POST -d "$jlc = new-object -com Scripting.FileSystemObject;$jlc | get-member" "http://127.0
.0.1:8080/"

...and works as it should.

When I change the PShell alias to incorporate SETDOS...
Code:
E:\Utils>which pshell
pshell is an alias : setdos /X-5 & curl -s -X POST -d "%$" http://127.0.0.1:8080/ & setdos /X+5

E:\Utils>pshell $jlc = new-object -com Scripting.FileSystemObject;$jlc | get-member
TCC: (Sys) The parameter is incorrect.
 "&"

I expect that I will be encountering other issues as I progress,
so I'm thinking that maybe a library function would be a better choice than an alias in this instance?

Ref: SETDOS command - Display or set the TCC configuration
Ref: ALIAS command - create new command names

Joe
 
I have no idea what you're doing, but what's "-X"? It's not given by the help for curl.exe (system32 or Gnu).
 
The -X option is included in the help,
but only in full help.

Code:
R:\>which curl
curl is an external : C:\WINDOWS\system32\curl.exe

curl --help all

Code:
     --abstract-unix-socket <path>                 Connect via abstract Unix domain socket
     --alt-svc <filename>                          Enable alt-svc with this cache file
     --anyauth                                     Pick any authentication method
 -a, --append                                      Append to target file when uploading
     --aws-sigv4 <provider1[:prvdr2[:reg[:srv]]]>  AWS V4 signature auth
     --basic                                       HTTP Basic Authentication
     --ca-native                                   Load CA certs from the OS
     --cacert <file>                               CA certificate to verify peer against
     --capath <dir>                                CA directory to verify peer against
 -E, --cert <certificate[:password]>               Client certificate file and password
     --cert-status                                 Verify server cert status OCSP-staple
     --cert-type <type>                            Certificate type (DER/PEM/ENG/PROV/P12)
     --ciphers <list>                              TLS 1.2 (1.1, 1.0) ciphers to use
     --compressed                                  Request compressed response
     --compressed-ssh                              Enable SSH compression
 -K, --config <file>                               Read config from a file
     --connect-timeout <seconds>                   Maximum time allowed to connect
     --connect-to <HOST1:PORT1:HOST2:PORT2>        Connect to host2 instead of host1
 -C, --continue-at <offset>                        Resumed transfer offset
 -b, --cookie <data|filename>                      Send cookies from string/load from file
 -c, --cookie-jar <filename>                       Save cookies to <filename> after operation
     --create-dirs                                 Create necessary local directory hierarchy
     --create-file-mode <mode>                     File mode for created files
     --crlf                                        Convert LF to CRLF in upload
     --crlfile <file>                              Certificate Revocation list
     --curves <list>                               (EC) TLS key exchange algorithms to request
 -d, --data <data>                                 HTTP POST data
     --data-ascii <data>                           HTTP POST ASCII data
     --data-binary <data>                          HTTP POST binary data
     --data-raw <data>                             HTTP POST data, '@' allowed
     --data-urlencode <data>                       HTTP POST data URL encoded
     --delegation <LEVEL>                          GSS-API delegation permission
     --digest                                      HTTP Digest Authentication
 -q, --disable                                     Disable .curlrc
     --disable-eprt                                Inhibit using EPRT or LPRT
     --disable-epsv                                Inhibit using EPSV
     --disallow-username-in-url                    Disallow username in URL
     --dns-interface <interface>                   Interface to use for DNS requests
     --dns-ipv4-addr <address>                     IPv4 address to use for DNS requests
     --dns-ipv6-addr <address>                     IPv6 address to use for DNS requests
     --dns-servers <addresses>                     DNS server addrs to use
     --doh-cert-status                             Verify DoH server cert status OCSP-staple
     --doh-insecure                                Allow insecure DoH server connections
     --doh-url <URL>                               Resolve hostnames over DoH
     --dump-ca-embed                               Write the embedded CA bundle to standard output
 -D, --dump-header <filename>                      Write the received headers to <filename>
     --ech <config>                                Configure ECH
     --egd-file <file>                             EGD socket path for random data
     --engine <name>                               Crypto engine to use
     --etag-compare <file>                         Load ETag from file
     --etag-save <file>                            Parse incoming ETag and save to a file
     --expect100-timeout <seconds>                 How long to wait for 100-continue
 -f, --fail                                        Fail fast with no output on HTTP errors
     --fail-early                                  Fail on first transfer error
     --fail-with-body                              Fail on HTTP errors but save the body
     --false-start                                 Enable TLS False Start
 -F, --form <name=content>                         Specify multipart MIME data
     --form-escape                                 Escape form fields using backslash
     --form-string <name=string>                   Specify multipart MIME data
     --ftp-account <data>                          Account data string
     --ftp-alternative-to-user <command>           String to replace USER [name]
     --ftp-create-dirs                             Create the remote dirs if not present
     --ftp-method <method>                         Control CWD usage
     --ftp-pasv                                    Send PASV/EPSV instead of PORT
 -P, --ftp-port <address>                          Send PORT instead of PASV
     --ftp-pret                                    Send PRET before PASV
     --ftp-skip-pasv-ip                            Skip the IP address for PASV
     --ftp-ssl-ccc                                 Send CCC after authenticating
     --ftp-ssl-ccc-mode <active/passive>           Set CCC mode
     --ftp-ssl-control                             Require TLS for login, clear for transfer
 -G, --get                                         Put the post data in the URL and use GET
 -g, --globoff                                     Disable URL globbing with {} and []
     --happy-eyeballs-timeout-ms <ms>              Time for IPv6 before IPv4
     --haproxy-clientip <ip>                       Set address in HAProxy PROXY
     --haproxy-protocol                            Send HAProxy PROXY protocol v1 header
 -I, --head                                        Show document info only
 -H, --header <header/@file>                       Pass custom header(s) to server
 -h, --help <subject>                              Get help for commands
     --hostpubmd5 <md5>                            Acceptable MD5 hash of host public key
     --hostpubsha256 <sha256>                      Acceptable SHA256 hash of host public key
     --hsts <filename>                             Enable HSTS with this cache file
     --http0.9                                     Allow HTTP/0.9 responses
 -0, --http1.0                                     Use HTTP/1.0
     --http1.1                                     Use HTTP/1.1
     --http2                                       Use HTTP/2
     --http2-prior-knowledge                       Use HTTP/2 without HTTP/1.1 Upgrade
     --http3                                       Use HTTP/3
     --http3-only                                  Use HTTP/3 only
     --ignore-content-length                       Ignore the size of the remote resource
 -k, --insecure                                    Allow insecure server connections
     --interface <name>                            Use network interface
     --ip-tos <string>                             Set IP Type of Service or Traffic Class
     --ipfs-gateway <URL>                          Gateway for IPFS
 -4, --ipv4                                        Resolve names to IPv4 addresses
 -6, --ipv6                                        Resolve names to IPv6 addresses
     --json <data>                                 HTTP POST JSON
 -j, --junk-session-cookies                        Ignore session cookies read from file
     --keepalive-cnt <integer>                     Maximum number of keepalive probes
     --keepalive-time <seconds>                    Interval time for keepalive probes
     --key <key>                                   Private key filename
     --key-type <type>                             Private key file type (DER/PEM/ENG)
     --krb <level>                                 Enable Kerberos with security <level>
     --libcurl <file>                              Generate libcurl code for this command line
     --limit-rate <speed>                          Limit transfer speed to RATE
 -l, --list-only                                   List only mode
     --local-port <range>                          Use a local port number within RANGE
 -L, --location                                    Follow redirects
     --location-trusted                            As --location, but send secrets to other hosts
     --login-options <options>                     Server login options
     --mail-auth <address>                         Originator address of the original email
     --mail-from <address>                         Mail from this address
     --mail-rcpt <address>                         Mail to this address
     --mail-rcpt-allowfails                        Allow RCPT TO command to fail
 -M, --manual                                      Display the full manual
     --max-filesize <bytes>                        Maximum file size to download
     --max-redirs <num>                            Maximum number of redirects allowed
 -m, --max-time <seconds>                          Maximum time allowed for transfer
     --metalink                                    Process given URLs as metalink XML file
     --mptcp                                       Enable Multipath TCP
     --negotiate                                   Use HTTP Negotiate (SPNEGO) authentication
 -n, --netrc                                       Must read .netrc for username and password
     --netrc-file <filename>                       Specify FILE for netrc
     --netrc-optional                              Use either .netrc or URL
 -:, --next                                        Make next URL use separate options
     --no-alpn                                     Disable the ALPN TLS extension
 -N, --no-buffer                                   Disable buffering of the output stream
     --no-clobber                                  Do not overwrite files that already exist
     --no-keepalive                                Disable TCP keepalive on the connection
     --no-npn                                      Disable the NPN TLS extension
     --no-progress-meter                           Do not show the progress meter
     --no-sessionid                                Disable SSL session-ID reusing
     --noproxy <no-proxy-list>                     List of hosts which do not use proxy
     --ntlm                                        HTTP NTLM authentication
     --ntlm-wb                                     HTTP NTLM authentication with winbind
     --oauth2-bearer <token>                       OAuth 2 Bearer Token
 -o, --output <file>                               Write to file instead of stdout
     --output-dir <dir>                            Directory to save files in
 -Z, --parallel                                    Perform transfers in parallel
     --parallel-immediate                          Do not wait for multiplexing
     --parallel-max <num>                          Maximum concurrency for parallel transfers
     --pass <phrase>                               Passphrase for the private key
     --path-as-is                                  Do not squash .. sequences in URL path
     --pinnedpubkey <hashes>                       Public key to verify peer against
     --post301                                     Do not switch to GET after a 301 redirect
     --post302                                     Do not switch to GET after a 302 redirect
     --post303                                     Do not switch to GET after a 303 redirect
     --preproxy <[protocol://]host[:port]>         Use this proxy first
 -#, --progress-bar                                Display transfer progress as a bar
     --proto <protocols>                           Enable/disable PROTOCOLS
     --proto-default <protocol>                    Use PROTOCOL for any URL missing a scheme
     --proto-redir <protocols>                     Enable/disable PROTOCOLS on redirect
 -x, --proxy <[protocol://]host[:port]>            Use this proxy
     --proxy-anyauth                               Pick any proxy authentication method
     --proxy-basic                                 Use Basic authentication on the proxy
     --proxy-ca-native                             Load CA certs from the OS to verify proxy
     --proxy-cacert <file>                         CA certificates to verify proxy against
     --proxy-capath <dir>                          CA directory to verify proxy against
     --proxy-cert <cert[:passwd]>                  Set client certificate for proxy
     --proxy-cert-type <type>                      Client certificate type for HTTPS proxy
     --proxy-ciphers <list>                        TLS 1.2 (1.1, 1.0) ciphers to use for proxy
     --proxy-crlfile <file>                        Set a CRL list for proxy
     --proxy-digest                                Digest auth with the proxy
     --proxy-header <header/@file>                 Pass custom header(s) to proxy
     --proxy-http2                                 Use HTTP/2 with HTTPS proxy
     --proxy-insecure                              Skip HTTPS proxy cert verification
     --proxy-key <key>                             Private key for HTTPS proxy
     --proxy-key-type <type>                       Private key file type for proxy
     --proxy-negotiate                             HTTP Negotiate (SPNEGO) auth with the proxy
     --proxy-ntlm                                  NTLM authentication with the proxy
     --proxy-pass <phrase>                         Passphrase for private key for HTTPS proxy
     --proxy-pinnedpubkey <hashes>                 FILE/HASHES public key to verify proxy with
     --proxy-service-name <name>                   SPNEGO proxy service name
     --proxy-ssl-allow-beast                       Allow this security flaw for HTTPS proxy
     --proxy-ssl-auto-client-cert                  Auto client certificate for proxy
     --proxy-tls13-ciphers <list>                  TLS 1.3 proxy cipher suites
     --proxy-tlsauthtype <type>                    TLS authentication type for HTTPS proxy
     --proxy-tlspassword <string>                  TLS password for HTTPS proxy
     --proxy-tlsuser <name>                        TLS username for HTTPS proxy
     --proxy-tlsv1                                 TLSv1 for HTTPS proxy
 -U, --proxy-user <user:password>                  Proxy user and password
     --proxy1.0 <host[:port]>                      Use HTTP/1.0 proxy on given port
 -p, --proxytunnel                                 HTTP proxy tunnel (using CONNECT)
     --pubkey <key>                                SSH Public key filename
 -Q, --quote <command>                             Send command(s) to server before transfer
     --random-file <file>                          File for reading random data from
 -r, --range <range>                               Retrieve only the bytes within RANGE
     --rate <max request rate>                     Request rate for serial transfers
     --raw                                         Do HTTP raw; no transfer decoding
 -e, --referer <URL>                               Referrer URL
 -J, --remote-header-name                          Use the header-provided filename
 -O, --remote-name                                 Write output to file named as remote file
     --remote-name-all                             Use the remote filename for all URLs
 -R, --remote-time                                 Set remote file's time on local output
     --remove-on-error                             Remove output file on errors
 -X, --request <method>                            Specify request method to use
     --request-target <path>                       Specify the target for this request
     --resolve <[+]host:port:addr[,addr]...>       Resolve host+port to address
     --retry <num>                                 Retry request if transient problems occur
     --retry-all-errors                            Retry all errors (with --retry)
     --retry-connrefused                           Retry on connection refused (with --retry)
     --retry-delay <seconds>                       Wait time between retries
     --retry-max-time <seconds>                    Retry only within this period
     --sasl-authzid <identity>                     Identity for SASL PLAIN authentication
     --sasl-ir                                     Initial response in SASL authentication
     --service-name <name>                         SPNEGO service name
 -S, --show-error                                  Show error even when -s is used
 -i, --show-headers                                Show response headers in output
 -s, --silent                                      Silent mode
     --skip-existing                               Skip download if local file already exists
     --socks4 <host[:port]>                        SOCKS4 proxy on given host + port
     --socks4a <host[:port]>                       SOCKS4a proxy on given host + port
     --socks5 <host[:port]>                        SOCKS5 proxy on given host + port
     --socks5-basic                                Username/password auth for SOCKS5 proxies
     --socks5-gssapi                               Enable GSS-API auth for SOCKS5 proxies
     --socks5-gssapi-nec                           Compatibility with NEC SOCKS5 server
     --socks5-gssapi-service <name>                SOCKS5 proxy service name for GSS-API
     --socks5-hostname <host[:port]>               SOCKS5 proxy, pass hostname to proxy
 -Y, --speed-limit <speed>                         Stop transfers slower than this
 -y, --speed-time <seconds>                        Trigger 'speed-limit' abort after this time
     --ssl                                         Try enabling TLS
     --ssl-allow-beast                             Allow security flaw to improve interop
     --ssl-auto-client-cert                        Use auto client certificate (Schannel)
     --ssl-no-revoke                               Disable cert revocation checks (Schannel)
     --ssl-reqd                                    Require SSL/TLS
     --ssl-revoke-best-effort                      Ignore missing cert CRL dist points
     --ssl-sessions <filename>                     Load/save SSL session tickets from/to this file
 -2, --sslv2                                       SSLv2
 -3, --sslv3                                       SSLv3
     --stderr <file>                               Where to redirect stderr
     --styled-output                               Enable styled output for HTTP headers
     --suppress-connect-headers                    Suppress proxy CONNECT response headers
     --tcp-fastopen                                Use TCP Fast Open
     --tcp-nodelay                                 Set TCP_NODELAY
 -t, --telnet-option <opt=val>                     Set telnet option
     --tftp-blksize <value>                        Set TFTP BLKSIZE option
     --tftp-no-options                             Do not send any TFTP options
 -z, --time-cond <time>                            Transfer based on a time condition
     --tls-earlydata                               Allow use of TLSv1.3 early data (0RTT)
     --tls-max <VERSION>                           Maximum allowed TLS version
     --tls13-ciphers <list>                        TLS 1.3 cipher suites to use
     --tlsauthtype <type>                          TLS authentication type
     --tlspassword <string>                        TLS password
     --tlsuser <name>                              TLS username
 -1, --tlsv1                                       TLSv1.0 or greater
     --tlsv1.0                                     TLSv1.0 or greater
     --tlsv1.1                                     TLSv1.1 or greater
     --tlsv1.2                                     TLSv1.2 or greater
     --tlsv1.3                                     TLSv1.3 or greater
     --tr-encoding                                 Request compressed transfer encoding
     --trace <file>                                Write a debug trace to FILE
     --trace-ascii <file>                          Like --trace, but without hex output
     --trace-config <string>                       Details to log in trace/verbose output
     --trace-ids                                   Transfer + connection ids in verbose output
     --trace-time                                  Add time stamps to trace/verbose output
     --unix-socket <path>                          Connect through this Unix domain socket
 -T, --upload-file <file>                          Transfer local FILE to destination
     --upload-flags <flags>                        IMAP upload behavior
     --url <url/file>                              URL(s) to work with
     --url-query <data>                            Add a URL query part
 -B, --use-ascii                                   Use ASCII/text transfer
 -u, --user <user:password>                        Server user and password
 -A, --user-agent <name>                           Send User-Agent <name> to server
     --variable <[%]name=text/@file>               Set variable
 -v, --verbose                                     Make the operation more talkative
 -V, --version                                     Show version number and quit
     --vlan-priority <priority>                    Set VLAN priority
 -w, --write-out <format>                          Output FORMAT after completion
     --xattr                                       Store metadata in extended file attributes[/code[

Joe
 
Ref: Using PowerShell from TCC without a 3rd-Party DLL

The ALIAS command is working as documented,
but what I want to do may be too complicated for it.

Code:
E:\Utils>ver

TCC  36.00.17 x64   Windows 10 [Version 10.0.19045.7058]

E:\Utils>which pshell
pshell is an alias : curl -s -X POST -d "%$" http://127.0.0.1:8080/

E:\Utils>pshell get-date;2026-1960

April 6, 2026 2:26:20 PM
66

Expanded, the alias becomes;

Code:
E:\Utils>curl -s -X POST -d "get-date;2026-1960" "http://127.0.0.1:8080/"

Question: How did the quotes get wrappeed around the URL?

Joe

The quotes are not being inserted by the alias expansion (or anywhere else in TCC). How are you determining that is the expanded alias?
 
From the Help File;
1775504581746.webp


Joe
 
That's not the real alias expansion; it's an artifact of the Ctrl-W. The command input editor on a Ctrl-W is doing a quick-and-dirty scan of each command line argument and double quoting expanded filename / directory arguments. The URL is getting double quotes because of the embedded '/' chars, which would otherwise be interpreted as command arguments.

The real alias expansion is not doing that.
 
Back
Top